Bug 2236 - Upgrade of Helm Charts is failing when the Helm Chart is embeded in the... 28/13228/2
authorGuillermo Calvino <guillermo.calvino@canonical.com>
Tue, 18 Apr 2023 16:43:59 +0000 (18:43 +0200)
committerGuillermo Calvino <guillermo.calvino@canonical.com>
Fri, 21 Apr 2023 10:05:33 +0000 (12:05 +0200)
Change-Id: Ib72d44c75ac15f7c26ce46bda643fbf99dadf893
Signed-off-by: Guillermo Calvino <guillermo.calvino@canonical.com>
osm_lcm/ns.py

index e3655df..614ff46 100644 (file)
@@ -139,7 +139,7 @@ class NsLcm(LcmBase):
     )  # timeout for some progress in a primitive execution
     timeout_migrate = 1800  # default global timeout for migrating vnfs
     timeout_operate = 1800  # default global timeout for migrating vnfs
-    timeout_verticalscale = 1800   # default global timeout for Vertical Sclaing
+    timeout_verticalscale = 1800  # default global timeout for Vertical Sclaing
     SUBOPERATION_STATUS_NOT_FOUND = -1
     SUBOPERATION_STATUS_NEW = -2
     SUBOPERATION_STATUS_SKIP = -3
@@ -257,7 +257,6 @@ class NsLcm(LcmBase):
         return None
 
     def _on_update_ro_db(self, nsrs_id, ro_descriptor):
-
         # self.logger.debug('_on_update_ro_db(nsrs_id={}'.format(nsrs_id))
 
         try:
@@ -275,7 +274,6 @@ class NsLcm(LcmBase):
             )
 
     async def _on_update_n2vc_db(self, table, filter, path, updated_data, vca_id=None):
-
         # remove last dot from path (if exists)
         if path.endswith("."):
             path = path[:-1]
@@ -283,7 +281,6 @@ class NsLcm(LcmBase):
         # self.logger.debug('_on_update_n2vc_db(table={}, filter={}, path={}, updated_data={}'
         #                   .format(table, filter, path, updated_data))
         try:
-
             nsr_id = filter.get("_id")
 
             # read ns record from database
@@ -551,7 +548,6 @@ class NsLcm(LcmBase):
             return wim_account
 
     def scale_vnfr(self, db_vnfr, vdu_create=None, vdu_delete=None, mark_delete=False):
-
         db_vdu_push_list = []
         template_vdur = []
         db_update = {"_admin.modified": time()}
@@ -839,7 +835,6 @@ class NsLcm(LcmBase):
         start_deploy,
         timeout_ns_deploy,
     ):
-
         db_vims = {}
 
         def get_vim_account(vim_account_id):
@@ -932,7 +927,6 @@ class NsLcm(LcmBase):
                             lambda v_vld: v_vld["name"] in (a_vld["name"], a_vld["id"]),
                         )
                         if target_vld:
-
                             if vnf_params.get("vimAccountId") not in a_vld.get(
                                 "vim_info", {}
                             ):
@@ -1318,8 +1312,13 @@ class NsLcm(LcmBase):
         self.logger.debug("RO return > {}".format(desc))
         action_id = desc["action_id"]
         await self._wait_ng_ro(
-            nsr_id, action_id, nslcmop_id, start_deploy, timeout_ns_deploy, stage,
-            operation="instantiation"
+            nsr_id,
+            action_id,
+            nslcmop_id,
+            start_deploy,
+            timeout_ns_deploy,
+            stage,
+            operation="instantiation",
         )
 
         # Updating NSR
@@ -1400,8 +1399,13 @@ class NsLcm(LcmBase):
             # wait until done
             delete_timeout = 20 * 60  # 20 minutes
             await self._wait_ng_ro(
-                nsr_id, action_id, nslcmop_id, start_deploy, delete_timeout, stage,
-                operation="termination"
+                nsr_id,
+                action_id,
+                nslcmop_id,
+                start_deploy,
+                delete_timeout,
+                stage,
+                operation="termination",
             )
 
             db_nsr_update["_admin.deployed.RO.nsr_delete_action_id"] = None
@@ -1578,7 +1582,6 @@ class NsLcm(LcmBase):
         ro_retries = 0
 
         while True:
-
             ro_retries += 1
             if ro_retries >= 360:  # 1 hour
                 raise LcmException(
@@ -1675,7 +1678,9 @@ class NsLcm(LcmBase):
                         }
                         desc = await self.RO.deploy(nsr_id, target)
                         action_id = desc["action_id"]
-                        await self._wait_ng_ro(nsr_id, action_id, timeout=600, operation="instantiation")
+                        await self._wait_ng_ro(
+                            nsr_id, action_id, timeout=600, operation="instantiation"
+                        )
                         break
                     else:
                         # wait until NS is deployed at RO
@@ -1810,7 +1815,6 @@ class NsLcm(LcmBase):
         }
         step = ""
         try:
-
             element_type = "NS"
             element_under_configuration = nsr_id
 
@@ -1894,7 +1898,6 @@ class NsLcm(LcmBase):
             vca_id = self.get_vca_id(db_vnfr, db_nsr)
             # create or register execution environment in VCA
             if vca_type in ("lxc_proxy_charm", "k8s_proxy_charm", "helm", "helm-v3"):
-
                 self._write_configuration_status(
                     nsr_id=nsr_id,
                     vca_index=vca_index,
@@ -2124,7 +2127,7 @@ class NsLcm(LcmBase):
                     # for a KNF and not for its KDUs, the previous verification gives False, and the code
                     # jumps to this block, meaning that there is the need to verify if the VNF is actually a VNF
                     # or it is a KNF)
-                    elif db_vnfr.get('vdur'):
+                    elif db_vnfr.get("vdur"):
                         rw_mgmt_ip = await self.wait_vm_up_insert_key_ro(
                             logging_text,
                             nsr_id,
@@ -2343,7 +2346,6 @@ class NsLcm(LcmBase):
         element_type: str = None,
         other_update: dict = None,
     ):
-
         # self.logger.debug('_write_configuration_status(): vca_index={}, status={}'
         #                   .format(vca_index, status))
 
@@ -2912,7 +2914,9 @@ class NsLcm(LcmBase):
 
     def _get_vnfd(self, vnfd_id: str, projects_read: str, cached_vnfds: Dict[str, Any]):
         if vnfd_id not in cached_vnfds:
-            cached_vnfds[vnfd_id] = self.db.get_one("vnfds", {"id": vnfd_id, "_admin.projects_read": projects_read})
+            cached_vnfds[vnfd_id] = self.db.get_one(
+                "vnfds", {"id": vnfd_id, "_admin.projects_read": projects_read}
+            )
         return cached_vnfds[vnfd_id]
 
     def _get_vnfr(self, nsr_id: str, vnf_profile_id: str, cached_vnfrs: Dict[str, Any]):
@@ -3207,7 +3211,6 @@ class NsLcm(LcmBase):
         vca_index: int,
         timeout: int = 3600,
     ) -> bool:
-
         # steps:
         # 1. find all relations for this VCA
         # 2. wait for other peers related
@@ -3285,7 +3288,6 @@ class NsLcm(LcmBase):
         timeout: int = 600,
         vca_id: str = None,
     ):
-
         try:
             k8sclustertype = k8s_instance_info["k8scluster-type"]
             # Instantiate kdu
@@ -5262,11 +5264,14 @@ class NsLcm(LcmBase):
                         del desc_params["kdu_model"]
                     else:
                         kdu_model = kdu.get("kdu-model")
-                        parts = kdu_model.split(sep=":")
-                        if len(parts) == 2:
-                            kdu_model = parts[0]
+                        if kdu_model.count("/") < 2:
+                            parts = kdu_model.split(sep=":")
+                            if len(parts) == 2:
+                                kdu_model = parts[0]
                     if desc_params.get("kdu_atomic_upgrade"):
-                        atomic_upgrade = desc_params.get("kdu_atomic_upgrade").lower() in ("yes", "true", "1")
+                        atomic_upgrade = desc_params.get(
+                            "kdu_atomic_upgrade"
+                        ).lower() in ("yes", "true", "1")
                         del desc_params["kdu_atomic_upgrade"]
                     else:
                         atomic_upgrade = True
@@ -5467,33 +5472,39 @@ class NsLcm(LcmBase):
                     "member-vnf-index": member_vnf_index,
                     "type": "delete",
                     "vdu_index": count_index,
-                    })
+                }
+            )
             scaling_info["vdu-delete"][vdu["vdu-id-ref"]] = count_index
             scaling_info["vdu"].append(
                 {
                     "name": vdu.get("name") or vdu.get("vdu-name"),
                     "vdu_id": vdu["vdu-id-ref"],
                     "interface": [],
-                    })
+                }
+            )
             for interface in vdu["interfaces"]:
                 scaling_info["vdu"][index]["interface"].append(
                     {
                         "name": interface["name"],
                         "ip_address": interface["ip-address"],
                         "mac_address": interface.get("mac-address"),
-                        })
+                    }
+                )
             self.logger.info("NS update scaling info{}".format(scaling_info))
             stage[2] = "Terminating VDUs"
             if scaling_info.get("vdu-delete"):
                 # scale_process = "RO"
                 if self.ro_config.get("ng"):
                     await self._scale_ng_ro(
-                        logging_text, db_nsr, update_db_nslcmops, db_vnfr, scaling_info, stage
+                        logging_text,
+                        db_nsr,
+                        update_db_nslcmops,
+                        db_vnfr,
+                        scaling_info,
+                        stage,
                     )
 
-    async def remove_vnf(
-        self, nsr_id, nslcmop_id, vnf_instance_id
-    ):
+    async def remove_vnf(self, nsr_id, nslcmop_id, vnf_instance_id):
         """This method is to Remove VNF instances from NS.
 
         Args:
@@ -5512,7 +5523,9 @@ class NsLcm(LcmBase):
             if check_vnfr_count > 1:
                 stage = ["", "", ""]
                 step = "Getting nslcmop from database"
-                self.logger.debug(step + " after having waited for previous tasks to be completed")
+                self.logger.debug(
+                    step + " after having waited for previous tasks to be completed"
+                )
                 # db_nslcmop = self.db.get_one("nslcmops", {"_id": nslcmop_id})
                 db_nsr = self.db.get_one("nsrs", {"_id": nsr_id})
                 db_vnfr = self.db.get_one("vnfrs", {"_id": vnf_instance_id})
@@ -5521,19 +5534,31 @@ class NsLcm(LcmBase):
                     "vnfrs", {"member-vnf-index-ref": member_vnf_index, "nsr-id-ref": nsr_id}) """
 
                 update_db_nslcmops = self.db.get_one("nslcmops", {"_id": nslcmop_id})
-                await self.terminate_vdus(db_vnfr, member_vnf_index, db_nsr, update_db_nslcmops, stage, logging_text)
+                await self.terminate_vdus(
+                    db_vnfr,
+                    member_vnf_index,
+                    db_nsr,
+                    update_db_nslcmops,
+                    stage,
+                    logging_text,
+                )
 
                 constituent_vnfr = db_nsr.get("constituent-vnfr-ref")
                 constituent_vnfr.remove(db_vnfr.get("_id"))
-                db_nsr_update["constituent-vnfr-ref"] = db_nsr.get("constituent-vnfr-ref")
+                db_nsr_update["constituent-vnfr-ref"] = db_nsr.get(
+                    "constituent-vnfr-ref"
+                )
                 self.update_db_2("nsrs", nsr_id, db_nsr_update)
                 self.db.del_one("vnfrs", {"_id": db_vnfr.get("_id")})
                 self.update_db_2("nsrs", nsr_id, db_nsr_update)
                 return "COMPLETED", "Done"
             else:
                 step = "Terminate VNF Failed with"
-                raise LcmException("{} Cannot terminate the last VNF in this NS.".format(
-                    vnf_instance_id))
+                raise LcmException(
+                    "{} Cannot terminate the last VNF in this NS.".format(
+                        vnf_instance_id
+                    )
+                )
         except (LcmException, asyncio.CancelledError):
             raise
         except Exception as e:
@@ -5541,7 +5566,12 @@ class NsLcm(LcmBase):
             return "FAILED", "Error removing VNF {}".format(e)
 
     async def _ns_redeploy_vnf(
-        self, nsr_id, nslcmop_id, db_vnfd, db_vnfr, db_nsr,
+        self,
+        nsr_id,
+        nslcmop_id,
+        db_vnfd,
+        db_vnfr,
+        db_nsr,
     ):
         """This method updates and redeploys VNF instances
 
@@ -5564,7 +5594,14 @@ class NsLcm(LcmBase):
 
             # Terminate old VNF resources
             update_db_nslcmops = self.db.get_one("nslcmops", {"_id": nslcmop_id})
-            await self.terminate_vdus(db_vnfr, member_vnf_index, db_nsr, update_db_nslcmops, stage, logging_text)
+            await self.terminate_vdus(
+                db_vnfr,
+                member_vnf_index,
+                db_nsr,
+                update_db_nslcmops,
+                stage,
+                logging_text,
+            )
 
             # old_vnfd_id = db_vnfr["vnfd-id"]
             # new_db_vnfd = self.db.get_one("vnfds", {"_id": vnfd_id})
@@ -5585,10 +5622,16 @@ class NsLcm(LcmBase):
             new_vdur = update_db_nslcmops["operationParams"]["newVdur"]
             # new_vdur = self._create_vdur_descriptor_from_vnfd(db_nsd, db_vnfd, old_db_vnfd, vnfd_id, db_nsr, member_vnf_index)
             # new_vnfr_update = {"vnfd-ref": new_vnfd_ref, "vnfd-id": new_vnfd_id, "connection-point": new_vnfr_cp, "vdur": new_vdur, "ip-address": ""}
-            new_vnfr_update = {"revision": latest_vnfd_revision, "connection-point": new_vnfr_cp, "vdur": new_vdur, "ip-address": ""}
+            new_vnfr_update = {
+                "revision": latest_vnfd_revision,
+                "connection-point": new_vnfr_cp,
+                "vdur": new_vdur,
+                "ip-address": "",
+            }
             self.update_db_2("vnfrs", db_vnfr["_id"], new_vnfr_update)
             updated_db_vnfr = self.db.get_one(
-                "vnfrs", {"member-vnf-index-ref": member_vnf_index, "nsr-id-ref": nsr_id}
+                "vnfrs",
+                {"member-vnf-index-ref": member_vnf_index, "nsr-id-ref": nsr_id},
             )
 
             # Instantiate new VNF resources
@@ -5600,9 +5643,7 @@ class NsLcm(LcmBase):
             scaling_info["kdu-create"] = {}
             vdud_instantiate_list = db_vnfd["vdu"]
             for index, vdud in enumerate(vdud_instantiate_list):
-                cloud_init_text = self._get_vdu_cloud_init_content(
-                    vdud, db_vnfd
-                )
+                cloud_init_text = self._get_vdu_cloud_init_content(vdud, db_vnfd)
                 if cloud_init_text:
                     additional_params = (
                         self._get_vdu_additional_params(updated_db_vnfr, vdud["id"])
@@ -5633,9 +5674,15 @@ class NsLcm(LcmBase):
                 scaling_info["vdu-create"][vdud["id"]] = count_index
             if self.ro_config.get("ng"):
                 self.logger.debug(
-                    "New Resources to be deployed: {}".format(scaling_info))
+                    "New Resources to be deployed: {}".format(scaling_info)
+                )
                 await self._scale_ng_ro(
-                    logging_text, db_nsr, update_db_nslcmops, updated_db_vnfr, scaling_info, stage
+                    logging_text,
+                    db_nsr,
+                    update_db_nslcmops,
+                    updated_db_vnfr,
+                    scaling_info,
+                    stage,
                 )
                 return "COMPLETED", "Done"
         except (LcmException, asyncio.CancelledError):
@@ -5681,7 +5728,6 @@ class NsLcm(LcmBase):
             raise
 
         except Exception as e:
-
             self.logger.debug("Error upgrading charm {}".format(path))
 
             return "FAILED", "Error upgrading charm {}: {}".format(path, e)
@@ -5744,7 +5790,6 @@ class NsLcm(LcmBase):
             nsr_deployed = db_nsr["_admin"].get("deployed")
 
             if update_type == "CHANGE_VNFPKG":
-
                 # Get the input parameters given through update request
                 vnf_instance_id = db_nslcmop["operationParams"][
                     "changeVnfPackageData"
@@ -5783,7 +5828,6 @@ class NsLcm(LcmBase):
 
                 step = "Checking if revision has changed in VNFD"
                 if current_vnf_revision != latest_vnfd_revision:
-
                     change_type = "policy_updated"
 
                     # There is new revision of VNFD, update operation is required
@@ -5831,7 +5875,6 @@ class NsLcm(LcmBase):
                             # There could be several charm used in the same VNF
                             for ee_item in ee_list:
                                 if ee_item.get("juju"):
-
                                     step = "Getting charm name"
                                     charm_name = ee_item["juju"].get("charm")
 
@@ -5861,7 +5904,6 @@ class NsLcm(LcmBase):
                     if find_software_version(current_vnfd) != find_software_version(
                         latest_vnfd
                     ):
-
                         step = "Checking if existing VNF has charm"
                         for current_charm_path, target_charm_path in list(
                             charm_artifact_paths
@@ -5877,15 +5919,8 @@ class NsLcm(LcmBase):
                         # based on new descriptor
                         step = "Redeploying VNF"
                         member_vnf_index = db_vnfr["member-vnf-index-ref"]
-                        (
-                            result,
-                            detailed_status
-                        ) = await self._ns_redeploy_vnf(
-                            nsr_id,
-                            nslcmop_id,
-                            latest_vnfd,
-                            db_vnfr,
-                            db_nsr
+                        (result, detailed_status) = await self._ns_redeploy_vnf(
+                            nsr_id, nslcmop_id, latest_vnfd, db_vnfr, db_nsr
                         )
                         if result == "FAILED":
                             nslcmop_operation_state = result
@@ -5910,10 +5945,8 @@ class NsLcm(LcmBase):
                                     current_charm_path, target_charm_path
                                 )
                             ):
-
                                 step = "Checking whether VNF uses juju bundle"
                                 if check_juju_bundle_existence(current_vnfd):
-
                                     raise LcmException(
                                         "Charm upgrade is not supported for the instance which"
                                         " uses juju-bundle: {}".format(
@@ -5972,7 +6005,9 @@ class NsLcm(LcmBase):
                 db_vnfr = self.db.get_one("vnfrs", {"_id": vnf_instance_id})
                 member_vnf_index = db_vnfr["member-vnf-index-ref"]
                 step = "Removing VNF"
-                (result, detailed_status) = await self.remove_vnf(nsr_id, nslcmop_id, vnf_instance_id)
+                (result, detailed_status) = await self.remove_vnf(
+                    nsr_id, nslcmop_id, vnf_instance_id
+                )
                 if result == "FAILED":
                     nslcmop_operation_state = result
                     error_description_nslcmop = detailed_status
@@ -5988,12 +6023,18 @@ class NsLcm(LcmBase):
                 )
 
             elif update_type == "OPERATE_VNF":
-                vnf_id = db_nslcmop["operationParams"]["operateVnfData"]["vnfInstanceId"]
-                operation_type = db_nslcmop["operationParams"]["operateVnfData"]["changeStateTo"]
-                additional_param = db_nslcmop["operationParams"]["operateVnfData"]["additionalParam"]
+                vnf_id = db_nslcmop["operationParams"]["operateVnfData"][
+                    "vnfInstanceId"
+                ]
+                operation_type = db_nslcmop["operationParams"]["operateVnfData"][
+                    "changeStateTo"
+                ]
+                additional_param = db_nslcmop["operationParams"]["operateVnfData"][
+                    "additionalParam"
+                ]
                 (result, detailed_status) = await self.rebuild_start_stop(
                     nsr_id, nslcmop_id, vnf_id, additional_param, operation_type
-                    )
+                )
                 if result == "FAILED":
                     nslcmop_operation_state = result
                     error_description_nslcmop = detailed_status
@@ -7296,7 +7337,9 @@ class NsLcm(LcmBase):
             job["vnfr_id"] = vnfr_id
         return job_list
 
-    async def rebuild_start_stop(self, nsr_id, nslcmop_id, vnf_id, additional_param, operation_type):
+    async def rebuild_start_stop(
+        self, nsr_id, nslcmop_id, vnf_id, additional_param, operation_type
+    ):
         logging_text = "Task ns={} {}={} ".format(nsr_id, operation_type, nslcmop_id)
         self.logger.info(logging_text + "Enter")
         stage = ["Preparing the environment", ""]
@@ -7314,7 +7357,7 @@ class NsLcm(LcmBase):
             vdurs = [item for item in db_vnfr["vdur"] if item["vdu-id-ref"] == vdu_id]
             vdur = find_in_list(
                 vdurs, lambda vdu: vdu["count-index"] == additional_param["count-index"]
-                )
+            )
             if vdur:
                 vdu_vim_name = vdur["name"]
                 vim_vm_id = vdur["vim_info"][vim_info_key]["vim_id"]
@@ -7325,7 +7368,7 @@ class NsLcm(LcmBase):
             # wait for any previous tasks in process
             stage[1] = "Waiting for previous operations to terminate"
             self.logger.info(stage[1])
-            await self.lcm_tasks.waitfor_related_HA('ns', 'nslcmops', nslcmop_id)
+            await self.lcm_tasks.waitfor_related_HA("ns", "nslcmops", nslcmop_id)
 
             stage[1] = "Reading from database."
             self.logger.info(stage[1])
@@ -7333,7 +7376,7 @@ class NsLcm(LcmBase):
                 nsr_id=nsr_id,
                 ns_state=None,
                 current_operation=operation_type.upper(),
-                current_operation_id=nslcmop_id
+                current_operation_id=nslcmop_id,
             )
             self._write_op_status(op_id=nslcmop_id, stage=stage, queuePosition=0)
 
@@ -7349,7 +7392,7 @@ class NsLcm(LcmBase):
                     "vdu_index": additional_param["count-index"],
                     "vdu_id": vdur["id"],
                     "target_vim": target_vim,
-                    "vim_account_id": vim_account_id
+                    "vim_account_id": vim_account_id,
                 }
             }
             stage[1] = "Sending rebuild request to RO... {}".format(desc)
@@ -7359,8 +7402,13 @@ class NsLcm(LcmBase):
             self.logger.info("response from RO: {}".format(result_dict))
             action_id = result_dict["action_id"]
             await self._wait_ng_ro(
-                nsr_id, action_id, nslcmop_id, start_deploy,
-                self.timeout_operate, None, "start_stop_rebuild",
+                nsr_id,
+                action_id,
+                nslcmop_id,
+                start_deploy,
+                self.timeout_operate,
+                None,
+                "start_stop_rebuild",
             )
             return "COMPLETED", "Done"
         except (ROclient.ROClientException, DbException, LcmException) as e:
@@ -7371,7 +7419,9 @@ class NsLcm(LcmBase):
             exc = "Operation was cancelled"
         except Exception as e:
             exc = traceback.format_exc()
-            self.logger.critical("Exit Exception {} {}".format(type(e).__name__, e), exc_info=True)
+            self.logger.critical(
+                "Exit Exception {} {}".format(type(e).__name__, e), exc_info=True
+            )
             return "FAILED", "Error in operate VNF {}".format(exc)
 
     def get_vca_cloud_and_credentials(self, vim_account_id: str) -> (str, str):
@@ -7444,8 +7494,12 @@ class NsLcm(LcmBase):
             self.logger.debug("RO return > {}".format(desc))
             action_id = desc["action_id"]
             await self._wait_ng_ro(
-                nsr_id, action_id, nslcmop_id, start_deploy, self.timeout_migrate,
-                operation="migrate"
+                nsr_id,
+                action_id,
+                nslcmop_id,
+                start_deploy,
+                self.timeout_migrate,
+                operation="migrate",
             )
         except (ROclient.ROClientException, DbException, LcmException) as e:
             self.logger.error("Exit Exception {}".format(e))
@@ -7495,7 +7549,6 @@ class NsLcm(LcmBase):
             self.logger.debug(logging_text + "Exit")
             self.lcm_tasks.remove("ns", nsr_id, nslcmop_id, "ns_migrate")
 
-
     async def heal(self, nsr_id, nslcmop_id):
         """
         Heal NS
@@ -7552,22 +7605,22 @@ class NsLcm(LcmBase):
             self.update_db_2("nsrs", nsr_id, db_nsr_update)
 
             step = "Sending heal order to VIM"
-            #task_ro = asyncio.ensure_future(
+            # task_ro = asyncio.ensure_future(
             #    self.heal_RO(
             #        logging_text=logging_text,
             #        nsr_id=nsr_id,
             #        db_nslcmop=db_nslcmop,
             #        stage=stage,
             #    )
-            #)
-            #self.lcm_tasks.register("ns", nsr_id, nslcmop_id, "heal_RO", task_ro)
-            #tasks_dict_info[task_ro] = "Healing at VIM"
+            # )
+            # self.lcm_tasks.register("ns", nsr_id, nslcmop_id, "heal_RO", task_ro)
+            # tasks_dict_info[task_ro] = "Healing at VIM"
             await self.heal_RO(
-                    logging_text=logging_text,
-                    nsr_id=nsr_id,
-                    db_nslcmop=db_nslcmop,
-                    stage=stage,
-                )
+                logging_text=logging_text,
+                nsr_id=nsr_id,
+                db_nslcmop=db_nslcmop,
+                stage=stage,
+            )
             # VCA tasks
             # read from db: nsd
             stage[1] = "Getting nsd={} from db.".format(db_nsr["nsd-id"])
@@ -7601,27 +7654,39 @@ class NsLcm(LcmBase):
                     member_vnf_index = db_vnfr.get("member-vnf-index-ref")
 
                     # Check each target VDU and deploy N2VC
-                    target_vdu_list = target_vnf.get("additionalParams", {}).get("vdu", [])
+                    target_vdu_list = target_vnf.get("additionalParams", {}).get(
+                        "vdu", []
+                    )
                     if not target_vdu_list:
                         # Codigo nuevo para crear diccionario
                         target_vdu_list = []
                         for existing_vdu in db_vnfr.get("vdur"):
                             vdu_name = existing_vdu.get("vdu-name", None)
                             vdu_index = existing_vdu.get("count-index", 0)
-                            vdu_run_day1 = target_vnf.get("additionalParams", {}).get("run-day1", False)
-                            vdu_to_be_healed = {"vdu-id": vdu_name, "count-index": vdu_index, "run-day1": vdu_run_day1}
+                            vdu_run_day1 = target_vnf.get("additionalParams", {}).get(
+                                "run-day1", False
+                            )
+                            vdu_to_be_healed = {
+                                "vdu-id": vdu_name,
+                                "count-index": vdu_index,
+                                "run-day1": vdu_run_day1,
+                            }
                             target_vdu_list.append(vdu_to_be_healed)
                     for target_vdu in target_vdu_list:
                         deploy_params_vdu = target_vdu
                         # Set run-day1 vnf level value if not vdu level value exists
-                        if not deploy_params_vdu.get("run-day1") and target_vnf["additionalParams"].get("run-day1"):
-                            deploy_params_vdu["run-day1"] = target_vnf["additionalParams"].get("run-day1")
+                        if not deploy_params_vdu.get("run-day1") and target_vnf[
+                            "additionalParams"
+                        ].get("run-day1"):
+                            deploy_params_vdu["run-day1"] = target_vnf[
+                                "additionalParams"
+                            ].get("run-day1")
                         vdu_name = target_vdu.get("vdu-id", None)
                         # TODO: Get vdu_id from vdud.
                         vdu_id = vdu_name
                         # For multi instance VDU count-index is mandatory
                         # For single session VDU count-indes is 0
-                        vdu_index = target_vdu.get("count-index",0)
+                        vdu_index = target_vdu.get("count-index", 0)
 
                         # n2vc_redesign STEP 3 to 6 Deploy N2VC
                         stage[1] = "Deploying Execution Environments."
@@ -7635,32 +7700,35 @@ class NsLcm(LcmBase):
                             vnf_ip_address = db_vnfr.get("ip-address")
                             target_instance = None
                             for instance in db_vnfr.get("vdur", None):
-                                if ( instance["vdu-name"] == vdu_name and instance["count-index"] == vdu_index ):
+                                if (
+                                    instance["vdu-name"] == vdu_name
+                                    and instance["count-index"] == vdu_index
+                                ):
                                     target_instance = instance
                                     break
                             if vnf_ip_address == target_instance.get("ip-address"):
                                 self._heal_n2vc(
-                                logging_text=logging_text
-                                + "member_vnf_index={}, vdu_name={}, vdu_index={} ".format(
-                                    member_vnf_index, vdu_name, vdu_index
-                                ),
-                                db_nsr=db_nsr,
-                                db_vnfr=db_vnfr,
-                                nslcmop_id=nslcmop_id,
-                                nsr_id=nsr_id,
-                                nsi_id=nsi_id,
-                                vnfd_id=vnfd_ref,
-                                vdu_id=None,
-                                kdu_name=None,
-                                member_vnf_index=member_vnf_index,
-                                vdu_index=0,
-                                vdu_name=None,
-                                deploy_params=deploy_params_vdu,
-                                descriptor_config=descriptor_config,
-                                base_folder=base_folder,
-                                task_instantiation_info=tasks_dict_info,
-                                stage=stage,
-                            )
+                                    logging_text=logging_text
+                                    + "member_vnf_index={}, vdu_name={}, vdu_index={} ".format(
+                                        member_vnf_index, vdu_name, vdu_index
+                                    ),
+                                    db_nsr=db_nsr,
+                                    db_vnfr=db_vnfr,
+                                    nslcmop_id=nslcmop_id,
+                                    nsr_id=nsr_id,
+                                    nsi_id=nsi_id,
+                                    vnfd_id=vnfd_ref,
+                                    vdu_id=None,
+                                    kdu_name=None,
+                                    member_vnf_index=member_vnf_index,
+                                    vdu_index=0,
+                                    vdu_name=None,
+                                    deploy_params=deploy_params_vdu,
+                                    descriptor_config=descriptor_config,
+                                    base_folder=base_folder,
+                                    task_instantiation_info=tasks_dict_info,
+                                    stage=stage,
+                                )
 
                         # VDU Level charm. Normal case with native charms.
                         descriptor_config = get_configuration(vnfd, vdu_name)
@@ -7729,9 +7797,7 @@ class NsLcm(LcmBase):
                     db_nsr_update["config-status"] = old_config_status
                     db_nsr_update[
                         "detailed-status"
-                    ] = "FAILED healing nslcmop={} {}: {}".format(
-                        nslcmop_id, step, exc
-                    )
+                    ] = "FAILED healing nslcmop={} {}: {}".format(nslcmop_id, step, exc)
                     for task, task_name in tasks_dict_info.items():
                         if not task.done() or task.cancelled() or task.exception():
                             if task_name.startswith(self.task_name_deploy_vca):
@@ -7794,6 +7860,7 @@ class NsLcm(LcmBase):
         :param stage: list with 3 items: [general stage, tasks, vim_specific]. This task will write over vim_specific
         :return: None or exception
         """
+
         def get_vim_account(vim_account_id):
             nonlocal db_vims
             if vim_account_id in db_vims:
@@ -7808,9 +7875,7 @@ class NsLcm(LcmBase):
             if ns_params and ns_params.get("timeout_ns_heal"):
                 timeout_ns_heal = ns_params["timeout_ns_heal"]
             else:
-                timeout_ns_heal = self.timeout.get(
-                    "ns_heal", self.timeout_ns_heal
-                )
+                timeout_ns_heal = self.timeout.get("ns_heal", self.timeout_ns_heal)
 
             db_vims = {}
 
@@ -7818,7 +7883,11 @@ class NsLcm(LcmBase):
             target = {
                 "action_id": nslcmop_id,
             }
-            self.logger.warning("db_nslcmop={} and timeout_ns_heal={}".format(db_nslcmop,timeout_ns_heal))
+            self.logger.warning(
+                "db_nslcmop={} and timeout_ns_heal={}".format(
+                    db_nslcmop, timeout_ns_heal
+                )
+            )
             target.update(db_nslcmop.get("operationParams", {}))
 
             self.logger.debug("Send to RO > nsr_id={} target={}".format(nsr_id, target))
@@ -7827,8 +7896,13 @@ class NsLcm(LcmBase):
             action_id = desc["action_id"]
             # waits for RO to complete because Reinjecting juju key at ro can find VM in state Deleted
             await self._wait_ng_ro(
-                nsr_id, action_id, nslcmop_id, start_heal, timeout_ns_heal, stage,
-                operation="healing"
+                nsr_id,
+                action_id,
+                nslcmop_id,
+                start_heal,
+                timeout_ns_heal,
+                stage,
+                operation="healing",
             )
 
             # Updating NSR
@@ -7844,7 +7918,7 @@ class NsLcm(LcmBase):
 
         except Exception as e:
             stage[2] = "ERROR healing at VIM"
-            #self.set_vnfr_at_error(db_vnfrs, str(e))
+            # self.set_vnfr_at_error(db_vnfrs, str(e))
             self.logger.error(
                 "Error healing at VIM {}".format(e),
                 exc_info=not isinstance(
@@ -8043,7 +8117,6 @@ class NsLcm(LcmBase):
         }
         step = ""
         try:
-
             element_type = "NS"
             element_under_configuration = nsr_id
 
@@ -8206,7 +8279,7 @@ class NsLcm(LcmBase):
                 status="INSTALLING SW",
                 element_under_configuration=element_under_configuration,
                 element_type=element_type,
-                #other_update=db_nsr_update,
+                # other_update=db_nsr_update,
                 other_update=None,
             )
 
@@ -8279,7 +8352,7 @@ class NsLcm(LcmBase):
                 # n2vc_redesign STEP 5.1
                 # wait for RO (ip-address) Insert pub_key into VM
                 # IMPORTANT: We need do wait for RO to complete healing operation.
-                await self._wait_heal_ro(nsr_id,self.timeout_ns_heal)
+                await self._wait_heal_ro(nsr_id, self.timeout_ns_heal)
                 if vnfr_id:
                     if kdu_name:
                         rw_mgmt_ip = await self.wait_kdu_up(
@@ -8305,15 +8378,19 @@ class NsLcm(LcmBase):
 
             # Day1 operations.
             # get run-day1 operation parameter
-            runDay1 =  deploy_params.get("run-day1",False)
-            self.logger.debug(" Healing vnf={}, vdu={}, runDay1 ={}".format(vnfr_id,vdu_id,runDay1))
+            runDay1 = deploy_params.get("run-day1", False)
+            self.logger.debug(
+                " Healing vnf={}, vdu={}, runDay1 ={}".format(vnfr_id, vdu_id, runDay1)
+            )
             if runDay1:
                 # n2vc_redesign STEP 6  Execute initial config primitive
                 step = "execute initial config primitive"
 
                 # wait for dependent primitives execution (NS -> VNF -> VDU)
                 if initial_config_primitive_list:
-                    await self._wait_dependent_n2vc(nsr_id, vca_deployed_list, vca_index)
+                    await self._wait_dependent_n2vc(
+                        nsr_id, vca_deployed_list, vca_index
+                    )
 
                 # stage, in function of element type: vdu, kdu, vnf or ns
                 my_vca = vca_deployed_list[vca_index]
@@ -8361,7 +8438,9 @@ class NsLcm(LcmBase):
                     if check_if_terminated_needed:
                         if config_descriptor.get("terminate-config-primitive"):
                             self.update_db_2(
-                                "nsrs", nsr_id, {db_update_entry + "needed_terminate": True}
+                                "nsrs",
+                                nsr_id,
+                                {db_update_entry + "needed_terminate": True},
                             )
                         check_if_terminated_needed = False
 
@@ -8424,7 +8503,9 @@ class NsLcm(LcmBase):
         start_time = time()
         while time() <= start_time + timeout:
             db_nsr = self.db.get_one("nsrs", {"_id": nsr_id})
-            operational_status_ro = db_nsr["_admin"]["deployed"]["RO"]["operational-status"]
+            operational_status_ro = db_nsr["_admin"]["deployed"]["RO"][
+                "operational-status"
+            ]
             self.logger.debug("Wait Heal RO > {}".format(operational_status_ro))
             if operational_status_ro != "healing":
                 break
@@ -8459,16 +8540,18 @@ class NsLcm(LcmBase):
         try:
             # wait for any previous tasks in process
             step = "Waiting for previous operations to terminate"
-            await self.lcm_tasks.waitfor_related_HA('ns', 'nslcmops', nslcmop_id)
+            await self.lcm_tasks.waitfor_related_HA("ns", "nslcmops", nslcmop_id)
 
             self._write_ns_status(
                 nsr_id=nsr_id,
                 ns_state=None,
                 current_operation="VerticalScale",
-                current_operation_id=nslcmop_id
+                current_operation_id=nslcmop_id,
             )
             step = "Getting nslcmop from database"
-            self.logger.debug(step + " after having waited for previous tasks to be completed")
+            self.logger.debug(
+                step + " after having waited for previous tasks to be completed"
+            )
             db_nslcmop = self.db.get_one("nslcmops", {"_id": nslcmop_id})
             operationParams = db_nslcmop.get("operationParams")
             target = {}
@@ -8477,8 +8560,12 @@ class NsLcm(LcmBase):
             self.logger.debug("RO return > {}".format(desc))
             action_id = desc["action_id"]
             await self._wait_ng_ro(
-                nsr_id, action_id, nslcmop_id, start_deploy, self.timeout_verticalscale,
-                operation="verticalscale"
+                nsr_id,
+                action_id,
+                nslcmop_id,
+                start_deploy,
+                self.timeout_verticalscale,
+                operation="verticalscale",
             )
         except (ROclient.ROClientException, DbException, LcmException) as e:
             self.logger.error("Exit Exception {}".format(e))
@@ -8488,7 +8575,9 @@ class NsLcm(LcmBase):
             exc = "Operation was cancelled"
         except Exception as e:
             exc = traceback.format_exc()
-            self.logger.critical("Exit Exception {} {}".format(type(e).__name__, e), exc_info=True)
+            self.logger.critical(
+                "Exit Exception {} {}".format(type(e).__name__, e), exc_info=True
+            )
         finally:
             self._write_ns_status(
                 nsr_id=nsr_id,
@@ -8497,9 +8586,7 @@ class NsLcm(LcmBase):
                 current_operation_id=None,
             )
             if exc:
-                db_nslcmop_update[
-                    "detailed-status"
-                ] = "FAILED {}: {}".format(step, exc)
+                db_nslcmop_update["detailed-status"] = "FAILED {}: {}".format(step, exc)
                 nslcmop_operation_state = "FAILED"
             else:
                 nslcmop_operation_state = "COMPLETED"