From: Dominik Fleischmann Date: Tue, 4 Feb 2020 14:32:42 +0000 (+0100) Subject: 1007 Use KDU name and NS id for model names X-Git-Tag: v7.0.1^0 X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FN2VC.git;a=commitdiff_plain;h=12aa0840d594fcb9c236fbb4d0e4aa85687ab4f8;ds=inline 1007 Use KDU name and NS id for model names This commit is part of the fix for Bug 1007. Previously The wrong naming was used in the uninstall function and it was deleting each application one by one. Now the whole model will be deleted automatically. This commit is dependent on this one in LCM: https://osm.etsi.org/gerrit/#/c/osm/LCM/+/8555/ Additionally the naming for models has changes so that each KDU gets is own model with the following naming: - . This will fix multi KDU support. Change-Id: I912105417d67d5f3d95b997b91d7a5b7388bdf0d Signed-off-by: Dominik Fleischmann (cherry picked from commit 847f3c055188614da2cd7ea8028db8ab025eb1d8) --- diff --git a/n2vc/k8s_conn.py b/n2vc/k8s_conn.py index 4fdaee8..f9aefa7 100644 --- a/n2vc/k8s_conn.py +++ b/n2vc/k8s_conn.py @@ -147,7 +147,8 @@ class K8sConnector(abc.ABC, Loggable): atomic: bool = True, timeout: float = 300, params: dict = None, - db_dict: dict = None + db_dict: dict = None, + kdu_name: str = None ): """ Deploys of a new KDU instance. It would implicitly rely on the `install` call to deploy the Chart/Bundle @@ -167,6 +168,7 @@ class K8sConnector(abc.ABC, Loggable): :param dict db_dict: where to write into database when the status changes. It contains a dict with {collection: , filter: {}, path: }, e.g. {collection: "nsrs", filter: {_id: , path: "_admin.deployed.K8S.3"} + :param kdu_name: Name of the KDU instance to be installed :return: True if successful """ diff --git a/n2vc/k8s_helm_conn.py b/n2vc/k8s_helm_conn.py index 3541db6..aca528e 100644 --- a/n2vc/k8s_helm_conn.py +++ b/n2vc/k8s_helm_conn.py @@ -327,7 +327,8 @@ class K8sHelmConnector(K8sConnector): atomic: bool = True, timeout: float = 300, params: dict = None, - db_dict: dict = None + db_dict: dict = None, + kdu_name: str = None ): self.debug('installing {} in cluster {}'.format(kdu_model, cluster_uuid)) diff --git a/n2vc/k8s_juju_conn.py b/n2vc/k8s_juju_conn.py index d2d9e88..8348f87 100644 --- a/n2vc/k8s_juju_conn.py +++ b/n2vc/k8s_juju_conn.py @@ -302,7 +302,8 @@ class K8sJujuConnector(K8sConnector): atomic: bool = True, timeout: float = 300, params: dict = None, - db_dict: dict = None + db_dict: dict = None, + kdu_name: str = None ) -> bool: """Install a bundle @@ -313,6 +314,7 @@ class K8sJujuConnector(K8sConnector): :param timeout int: The time, in seconds, to wait for the install to finish :param params dict: Key-value pairs of instantiation parameters + :param kdu_name: Name of the KDU instance to be installed :return: If successful, returns ? """ @@ -324,14 +326,17 @@ class K8sJujuConnector(K8sConnector): ## # Get or create the model, based on the NS # uuid. - model_name = db_dict["filter"]["_id"] + if kdu_name: + kdu_instance = "{}-{}".format(kdu_name, db_dict["filter"]["_id"]) + else: + kdu_instance = db_dict["filter"]["_id"] - self.log.debug("Checking for model named {}".format(model_name)) - model = await self.get_model(model_name, cluster_uuid=cluster_uuid) + self.log.debug("Checking for model named {}".format(kdu_instance)) + model = await self.get_model(kdu_instance, cluster_uuid=cluster_uuid) if not model: # Create the new model - self.log.debug("Adding model: {}".format(model_name)) - model = await self.add_model(model_name, cluster_uuid=cluster_uuid) + self.log.debug("Adding model: {}".format(kdu_instance)) + model = await self.add_model(kdu_instance, cluster_uuid=cluster_uuid) if model: # TODO: Instantiation parameters @@ -398,7 +403,7 @@ class K8sJujuConnector(K8sConnector): print("[install] Disconnecting model") await model.disconnect() - return True + return kdu_instance raise Exception("Unable to install") async def instances_list( @@ -511,35 +516,18 @@ class K8sJujuConnector(K8sConnector): async def uninstall( self, cluster_uuid: str, - kdu_instance: str, + kdu_instance: str ) -> bool: """Uninstall a KDU instance - :param cluster_uuid str: The UUID of the cluster to uninstall + :param cluster_uuid str: The UUID of the cluster :param kdu_instance str: The unique name of the KDU instance :return: Returns True if successful, or raises an exception """ - removed = False + await self.controller.destroy_models(kdu_instance) - # Remove an application from the model - model = await self.get_model(self.get_namespace(cluster_uuid), cluster_uuid=cluster_uuid) - - if model: - # Get the application - if kdu_instance not in model.applications: - # TODO: Raise a named exception - raise Exception("Application not found.") - - application = model.applications[kdu_instance] - - # Destroy the application - await application.destroy() - - # TODO: Verify removal - - removed = True - return removed + return True """Introspection""" async def inspect_kdu(