1007 Use KDU name and NS id for model names 70/8570/1 v7.0.1
authorDominik Fleischmann <dominik.fleischmann@canonical.com>
Tue, 4 Feb 2020 14:32:42 +0000 (15:32 +0100)
committerisraelad <adam.israel@canonical.com>
Thu, 6 Feb 2020 21:00:05 +0000 (22:00 +0100)
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:
<kdu-name>-<ns-id> . This will fix multi KDU support.

Change-Id: I912105417d67d5f3d95b997b91d7a5b7388bdf0d
Signed-off-by: Dominik Fleischmann <dominik.fleischmann@canonical.com>
(cherry picked from commit 847f3c055188614da2cd7ea8028db8ab025eb1d8)

n2vc/k8s_conn.py
n2vc/k8s_helm_conn.py
n2vc/k8s_juju_conn.py

index 4fdaee8..f9aefa7 100644 (file)
@@ -147,7 +147,8 @@ class K8sConnector(abc.ABC, Loggable):
             atomic: bool = True,
             timeout: float = 300,
             params: dict = None,
             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
     ):
         """
         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: <str>, filter: {},  path: <str>},
                             e.g. {collection: "nsrs", filter: {_id: <nsd-id>, path: "_admin.deployed.K8S.3"}
         :param dict db_dict: where to write into database when the status changes.
                         It contains a dict with {collection: <str>, filter: {},  path: <str>},
                             e.g. {collection: "nsrs", filter: {_id: <nsd-id>, path: "_admin.deployed.K8S.3"}
+        :param kdu_name: Name of the KDU instance to be installed
         :return: True if successful
         """
 
         :return: True if successful
         """
 
index 3541db6..aca528e 100644 (file)
@@ -327,7 +327,8 @@ class K8sHelmConnector(K8sConnector):
             atomic: bool = True,
             timeout: float = 300,
             params: dict = None,
             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))
     ):
 
         self.debug('installing {} in cluster {}'.format(kdu_model, cluster_uuid))
index d2d9e88..8348f87 100644 (file)
@@ -302,7 +302,8 @@ class K8sJujuConnector(K8sConnector):
         atomic: bool = True,
         timeout: float = 300,
         params: dict = None,
         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
 
     ) -> 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 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 ?
         """
 
         :return: If successful, returns ?
         """
@@ -324,14 +326,17 @@ class K8sJujuConnector(K8sConnector):
         ##
         # Get or create the model, based on the NS
         # uuid.
         ##
         # 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
         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
 
         if model:
             # TODO: Instantiation parameters
@@ -398,7 +403,7 @@ class K8sJujuConnector(K8sConnector):
                 print("[install] Disconnecting model")
                 await model.disconnect()
 
                 print("[install] Disconnecting model")
                 await model.disconnect()
 
-            return True
+            return kdu_instance
         raise Exception("Unable to install")
 
     async def instances_list(
         raise Exception("Unable to install")
 
     async def instances_list(
@@ -511,35 +516,18 @@ class K8sJujuConnector(K8sConnector):
     async def uninstall(
         self,
         cluster_uuid: str,
     async def uninstall(
         self,
         cluster_uuid: str,
-        kdu_instance: str,
+        kdu_instance: str
     ) -> bool:
         """Uninstall a KDU instance
 
     ) -> 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
         """
         :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(
 
     """Introspection"""
     async def inspect_kdu(