- # #TODO check if VIM is creating and wait
- # RO_vim_id = db_vim["_admin"]["deployed"]["RO"]
- # Call internal terminate action
- await self._terminate_action(db_nslcmop, nslcmop_id, nsr_id)
-
- pending_tasks = []
-
- db_nsr_update["operational-status"] = "terminating"
- db_nsr_update["config-status"] = "terminating"
-
- # remove NS
- try:
- step = "delete execution environment"
- self.logger.debug(logging_text + step)
-
- task_delete_ee = asyncio.ensure_future(self._delete_N2VC(nsr_id=nsr_id))
- # task_delete_ee = asyncio.ensure_future(self.n2vc.delete_namespace(namespace="." + nsr_id))
-
- pending_tasks.append(task_delete_ee)
- except Exception as e:
- msg = "Failed while deleting ns={} in VCA: {}".format(nsr_id, e)
- self.logger.error(msg)
- failed_detail.append(msg)
-
- try:
- # Delete from k8scluster
- step = "delete kdus"
- self.logger.debug(logging_text + step)
- # print(nsr_deployed)
- if nsr_deployed:
- for kdu in nsr_deployed.get("K8s", ()):
- kdu_instance = kdu.get("kdu-instance")
- if not kdu_instance:
- continue
- if kdu.get("k8scluster-type") == "chart":
- task_delete_kdu_instance = asyncio.ensure_future(
- self.k8sclusterhelm.uninstall(cluster_uuid=kdu.get("k8scluster-uuid"),
- kdu_instance=kdu_instance))
- elif kdu.get("k8scluster-type") == "juju":
- task_delete_kdu_instance = asyncio.ensure_future(
- self.k8sclusterjuju.uninstall(cluster_uuid=kdu.get("k8scluster-uuid"),
- kdu_instance=kdu_instance))
- else:
- self.error(logging_text + "Unknown k8s deployment type {}".
- format(kdu.get("k8scluster-type")))
- continue
- pending_tasks.append(task_delete_kdu_instance)
- except LcmException as e:
- msg = "Failed while deleting KDUs from ns={}: {}".format(nsr_id, e)
- self.logger.error(msg)
- failed_detail.append(msg)
-
- # remove from RO
- RO_fail = False
-
- # Delete ns
- RO_nsr_id = RO_delete_action = None
- if nsr_deployed and nsr_deployed.get("RO"):
- RO_nsr_id = nsr_deployed["RO"].get("nsr_id")
- RO_delete_action = nsr_deployed["RO"].get("nsr_delete_action_id")
- try:
- if RO_nsr_id:
- step = db_nsr_update["detailed-status"] = db_nslcmop_update["detailed-status"] = \
- "Deleting ns from VIM"
- self.update_db_2("nslcmops", nslcmop_id, db_nslcmop_update)
- self.update_db_2("nsrs", nsr_id, db_nsr_update)
- self.logger.debug(logging_text + step)
- desc = await self.RO.delete("ns", RO_nsr_id)
- RO_delete_action = desc["action_id"]
- db_nsr_update["_admin.deployed.RO.nsr_delete_action_id"] = RO_delete_action
- db_nsr_update["_admin.deployed.RO.nsr_id"] = None
- db_nsr_update["_admin.deployed.RO.nsr_status"] = "DELETED"
- if RO_delete_action:
- # wait until NS is deleted from VIM
- step = detailed_status = "Waiting ns deleted from VIM. RO_id={} RO_delete_action={}".\
- format(RO_nsr_id, RO_delete_action)
- detailed_status_old = None
- self.logger.debug(logging_text + step)
-
- delete_timeout = 20 * 60 # 20 minutes
- while delete_timeout > 0:
- desc = await self.RO.show(
- "ns",
- item_id_name=RO_nsr_id,
- extra_item="action",
- extra_item_id=RO_delete_action)
-
- # deploymentStatus
- self._on_update_ro_db(nsrs_id=nsr_id, ro_descriptor=desc)
-
- ns_status, ns_status_info = self.RO.check_action_status(desc)
- if ns_status == "ERROR":
- raise ROclient.ROClientException(ns_status_info)
- elif ns_status == "BUILD":
- detailed_status = step + "; {}".format(ns_status_info)
- elif ns_status == "ACTIVE":
- db_nsr_update["_admin.deployed.RO.nsr_delete_action_id"] = None
- db_nsr_update["_admin.deployed.RO.nsr_status"] = "DELETED"
- break
- else:
- assert False, "ROclient.check_action_status returns unknown {}".format(ns_status)
- if detailed_status != detailed_status_old:
- detailed_status_old = db_nslcmop_update["detailed-status"] = \
- db_nsr_update["detailed-status"] = detailed_status
- self.update_db_2("nslcmops", nslcmop_id, db_nslcmop_update)
- self.update_db_2("nsrs", nsr_id, db_nsr_update)
- await asyncio.sleep(5, loop=self.loop)
- delete_timeout -= 5
- else: # delete_timeout <= 0:
- raise ROclient.ROClientException("Timeout waiting ns deleted from VIM")
-
- except ROclient.ROClientException as e:
- if e.http_code == 404: # not found
- db_nsr_update["_admin.deployed.RO.nsr_id"] = None
- db_nsr_update["_admin.deployed.RO.nsr_status"] = "DELETED"
- db_nsr_update["_admin.deployed.RO.nsr_delete_action_id"] = None
- self.logger.debug(logging_text + "RO_ns_id={} already deleted".format(RO_nsr_id))
- elif e.http_code == 409: # conflict
- failed_detail.append("RO_ns_id={} delete conflict: {}".format(RO_nsr_id, e))
- self.logger.debug(logging_text + failed_detail[-1])
- RO_fail = True
- else:
- failed_detail.append("RO_ns_id={} delete error: {}".format(RO_nsr_id, e))
- self.logger.error(logging_text + failed_detail[-1])
- RO_fail = True