Fix bug 1442: set SDN target in vim_info for NS VLD
[osm/LCM.git] / osm_lcm / vim_sdn.py
index 7c774d2..13b95c4 100644 (file)
@@ -38,7 +38,7 @@ class VimLcm(LcmBase):
     vim_config_encrypted = {"1.1": ("admin_password", "nsx_password", "vcenter_password"),
                             "default": ("admin_password", "nsx_password", "vcenter_password", "vrops_password")}
 
-    def __init__(self, db, msg, fs, lcm_tasks, config, loop):
+    def __init__(self, msg, lcm_tasks, config, loop):
         """
         Init, Connect to database, filesystem storage, and messaging
         :param config: two level dictionary with configuration. Top level should contain 'database', 'storage',
@@ -50,7 +50,7 @@ class VimLcm(LcmBase):
         self.lcm_tasks = lcm_tasks
         self.ro_config = config["ro_config"]
 
-        super().__init__(db, msg, fs, self.logger)
+        super().__init__(msg, self.logger)
 
     async def create(self, vim_content, order_id):
 
@@ -142,7 +142,6 @@ class VimLcm(LcmBase):
             operation_state = 'COMPLETED'
             operation_details = 'Done'
 
-            # await asyncio.sleep(15)   # TODO remove. This is for test
             self.logger.debug(logging_text + "Exit Ok VIM account created at RO_vim_account_id={}".format(desc["uuid"]))
             return
 
@@ -228,7 +227,7 @@ class VimLcm(LcmBase):
                 vim_RO.pop("vim_password", None)
                 if RO_sdn_id:
                     vim_RO["config"]["sdn-controller"] = RO_sdn_id
-                # TODO make a deep update of sdn-port-mapping 
+                # TODO make a deep update of sdn-port-mapping
                 if vim_RO:
                     await RO.edit("vim", RO_vim_id, descriptor=vim_RO)
 
@@ -319,31 +318,31 @@ class VimLcm(LcmBase):
         try:
             # wait for any previous tasks in process
             await self.lcm_tasks.waitfor_related_HA('vim', 'delete', op_id)
-
-            db_vim = self.db.get_one("vim_accounts", {"_id": vim_id})
-            if db_vim.get("_admin") and db_vim["_admin"].get("deployed") and db_vim["_admin"]["deployed"].get("RO"):
-                RO_vim_id = db_vim["_admin"]["deployed"]["RO"]
-                RO = ROclient.ROClient(self.loop, **self.ro_config)
-                step = "Detaching vim from RO tenant"
-                try:
-                    await RO.detach("vim_account", RO_vim_id)
-                except ROclient.ROClientException as e:
-                    if e.http_code == 404:  # not found
-                        self.logger.debug(logging_text + "RO_vim_id={} already detached".format(RO_vim_id))
-                    else:
-                        raise
-
-                step = "Deleting vim from RO"
-                try:
-                    await RO.delete("vim", RO_vim_id)
-                except ROclient.ROClientException as e:
-                    if e.http_code == 404:  # not found
-                        self.logger.debug(logging_text + "RO_vim_id={} already deleted".format(RO_vim_id))
-                    else:
-                        raise
-            else:
-                # nothing to delete
-                self.logger.error(logging_text + "Nothing to remove at RO")
+            if not self.ro_config.get("ng"):
+                db_vim = self.db.get_one("vim_accounts", {"_id": vim_id})
+                if db_vim.get("_admin") and db_vim["_admin"].get("deployed") and db_vim["_admin"]["deployed"].get("RO"):
+                    RO_vim_id = db_vim["_admin"]["deployed"]["RO"]
+                    RO = ROclient.ROClient(self.loop, **self.ro_config)
+                    step = "Detaching vim from RO tenant"
+                    try:
+                        await RO.detach("vim_account", RO_vim_id)
+                    except ROclient.ROClientException as e:
+                        if e.http_code == 404:  # not found
+                            self.logger.debug(logging_text + "RO_vim_id={} already detached".format(RO_vim_id))
+                        else:
+                            raise
+
+                    step = "Deleting vim from RO"
+                    try:
+                        await RO.delete("vim", RO_vim_id)
+                    except ROclient.ROClientException as e:
+                        if e.http_code == 404:  # not found
+                            self.logger.debug(logging_text + "RO_vim_id={} already deleted".format(RO_vim_id))
+                        else:
+                            raise
+                else:
+                    # nothing to delete
+                    self.logger.debug(logging_text + "Nothing to remove at RO")
             self.db.del_one("vim_accounts", {"_id": vim_id})
             db_vim = None
             self.logger.debug(logging_text + "Exit Ok")
@@ -380,7 +379,7 @@ class WimLcm(LcmBase):
     # values that are encrypted at wim config because they are passwords
     wim_config_encrypted = ()
 
-    def __init__(self, db, msg, fs, lcm_tasks, config, loop):
+    def __init__(self, msg, lcm_tasks, config, loop):
         """
         Init, Connect to database, filesystem storage, and messaging
         :param config: two level dictionary with configuration. Top level should contain 'database', 'storage',
@@ -392,7 +391,7 @@ class WimLcm(LcmBase):
         self.lcm_tasks = lcm_tasks
         self.ro_config = config["ro_config"]
 
-        super().__init__(db, msg, fs, self.logger)
+        super().__init__(msg, self.logger)
 
     async def create(self, wim_content, order_id):
 
@@ -675,7 +674,7 @@ class WimLcm(LcmBase):
 
 class SdnLcm(LcmBase):
 
-    def __init__(self, db, msg, fs, lcm_tasks, config, loop):
+    def __init__(self, msg, lcm_tasks, config, loop):
         """
         Init, Connect to database, filesystem storage, and messaging
         :param config: two level dictionary with configuration. Top level should contain 'database', 'storage',
@@ -687,7 +686,7 @@ class SdnLcm(LcmBase):
         self.lcm_tasks = lcm_tasks
         self.ro_config = config["ro_config"]
 
-        super().__init__(db, msg, fs, self.logger)
+        super().__init__(msg, self.logger)
 
     async def create(self, sdn_content, order_id):
 
@@ -900,7 +899,7 @@ class SdnLcm(LcmBase):
 class K8sClusterLcm(LcmBase):
     timeout_create = 300
 
-    def __init__(self, db, msg, fs, lcm_tasks, config, loop):
+    def __init__(self, msg, lcm_tasks, config, loop):
         """
         Init, Connect to database, filesystem storage, and messaging
         :param config: two level dictionary with configuration. Top level should contain 'database', 'storage',
@@ -911,16 +910,16 @@ class K8sClusterLcm(LcmBase):
         self.loop = loop
         self.lcm_tasks = lcm_tasks
         self.vca_config = config["VCA"]
-        self.fs = fs
-        self.db = db
+
+        super().__init__(msg, self.logger)
 
         self.helm2_k8scluster = K8sHelmConnector(
             kubectl_command=self.vca_config.get("kubectlpath"),
             helm_command=self.vca_config.get("helmpath"),
-            fs=self.fs,
             log=self.logger,
+            on_update_db=None,
             db=self.db,
-            on_update_db=None
+            fs=self.fs
         )
 
         self.helm3_k8scluster = K8sHelm3Connector(
@@ -935,21 +934,20 @@ class K8sClusterLcm(LcmBase):
         self.juju_k8scluster = K8sJujuConnector(
             kubectl_command=self.vca_config.get("kubectlpath"),
             juju_command=self.vca_config.get("jujupath"),
-            fs=self.fs,
             log=self.logger,
-            db=self.db,
             loop=self.loop,
             on_update_db=None,
             vca_config=self.vca_config,
+            db=self.db,
+            fs=self.fs
         )
+
         self.k8s_map = {
             "helm-chart": self.helm2_k8scluster,
             "helm-chart-v3": self.helm3_k8scluster,
             "juju-bundle": self.juju_k8scluster,
         }
 
-        super().__init__(db, msg, fs, self.logger)
-
     async def create(self, k8scluster_content, order_id):
 
         op_id = k8scluster_content.pop('op_id', None)
@@ -1105,7 +1103,7 @@ class K8sClusterLcm(LcmBase):
             if k8s_h3c_id:
                 step = "Removing helm-chart-v3 '{}'".format(k8s_hc_id)
                 uninstall_sw = deep_get(db_k8scluster, ("_admin", "helm-chart-v3", "created")) or False
-                cluster_removed = await self.helm3_k8scluster.reset(cluster_uuid=k8s_hc_id, uninstall_sw=uninstall_sw)
+                cluster_removed = await self.helm3_k8scluster.reset(cluster_uuid=k8s_h3c_id, uninstall_sw=uninstall_sw)
                 db_k8scluster_update["_admin.helm-chart-v3.id"] = None
                 db_k8scluster_update["_admin.helm-chart-v3.operationalState"] = "DISABLED"
 
@@ -1157,7 +1155,7 @@ class K8sClusterLcm(LcmBase):
 
 class K8sRepoLcm(LcmBase):
 
-    def __init__(self, db, msg, fs, lcm_tasks, config, loop):
+    def __init__(self, msg, lcm_tasks, config, loop):
         """
         Init, Connect to database, filesystem storage, and messaging
         :param config: two level dictionary with configuration. Top level should contain 'database', 'storage',
@@ -1168,10 +1166,17 @@ class K8sRepoLcm(LcmBase):
         self.loop = loop
         self.lcm_tasks = lcm_tasks
         self.vca_config = config["VCA"]
-        self.fs = fs
-        self.db = db
 
-        super().__init__(db, msg, fs, self.logger)
+        super().__init__(msg, self.logger)
+
+        self.k8srepo = K8sHelmConnector(
+            kubectl_command=self.vca_config.get("kubectlpath"),
+            helm_command=self.vca_config.get("helmpath"),
+            fs=self.fs,
+            log=self.logger,
+            db=self.db,
+            on_update_db=None
+        )
 
     async def create(self, k8srepo_content, order_id):