X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_lcm%2Fvim_sdn.py;h=41a16e5229bc2844d31add77151fd0f04c1d1cdd;hb=8e53c6d0046a3015bf015b745aa3cf9a30a8fbe6;hp=c81969abd306ede66c2ab035a9cf09544eb2b924;hpb=1b2b840cfdc739e2c7dcd49dafd38577124c58b2;p=osm%2FLCM.git diff --git a/osm_lcm/vim_sdn.py b/osm_lcm/vim_sdn.py index c81969a..41a16e5 100644 --- a/osm_lcm/vim_sdn.py +++ b/osm_lcm/vim_sdn.py @@ -56,7 +56,7 @@ class VimLcm(LcmBase): self.logger = logging.getLogger("lcm.vim") self.loop = loop self.lcm_tasks = lcm_tasks - self.ro_config = config["ro_config"] + self.ro_config = config["RO"] super().__init__(msg, self.logger) @@ -478,7 +478,7 @@ class WimLcm(LcmBase): self.logger = logging.getLogger("lcm.vim") self.loop = loop self.lcm_tasks = lcm_tasks - self.ro_config = config["ro_config"] + self.ro_config = config["RO"] super().__init__(msg, self.logger) @@ -826,7 +826,7 @@ class SdnLcm(LcmBase): self.logger = logging.getLogger("lcm.sdn") self.loop = loop self.lcm_tasks = lcm_tasks - self.ro_config = config["ro_config"] + self.ro_config = config["RO"] super().__init__(msg, self.logger) @@ -1006,7 +1006,7 @@ class SdnLcm(LcmBase): logging_text = "Task sdn_delete={} ".format(sdn_id) self.logger.debug(logging_text + "Enter") - db_sdn = None + db_sdn = {} db_sdn_update = {} exc = None step = "Getting sdn from db" @@ -1039,7 +1039,7 @@ class SdnLcm(LcmBase): logging_text + "Skipping. There is not RO information at database" ) self.db.del_one("sdns", {"_id": sdn_id}) - db_sdn = None + db_sdn = {} self.logger.debug("sdn_delete task sdn_id={} Exit Ok".format(sdn_id)) return @@ -1159,7 +1159,11 @@ class K8sClusterLcm(LcmBase): k8s_deploy_methods = db_k8scluster.get("deployment_methods", {}) # for backwards compatibility and all-false case if not any(k8s_deploy_methods.values()): - k8s_deploy_methods = {"helm-chart": True, "juju-bundle": True, "helm-chart-v3": True} + k8s_deploy_methods = { + "helm-chart": True, + "juju-bundle": True, + "helm-chart-v3": True, + } deploy_methods = tuple(filter(k8s_deploy_methods.get, k8s_deploy_methods)) for task_name in deploy_methods: @@ -1462,6 +1466,33 @@ class VcaLcm(LcmBase): ) return db_vca + async def _validate_vca(self, db_vca_id: str) -> None: + task = asyncio.ensure_future( + asyncio.wait_for( + self.n2vc.validate_vca(db_vca_id), + timeout=self.timeout_create, + ) + ) + await asyncio.wait([task], return_when=asyncio.FIRST_COMPLETED) + if task.exception(): + raise task.exception() + + def _is_vca_config_update(self, update_options) -> bool: + return any( + word in update_options.keys() + for word in [ + "cacert", + "endpoints", + "lxd-cloud", + "lxd-credentials", + "k8s-cloud", + "k8s-credentials", + "model-config", + "user", + "secret", + ] + ) + async def create(self, vca_content, order_id): op_id = vca_content.pop("op_id", None) if not self.lcm_tasks.lock_HA("vca", "create", op_id): @@ -1470,25 +1501,17 @@ class VcaLcm(LcmBase): vca_id = vca_content["_id"] self.logger.debug("Task vca_create={} {}".format(vca_id, "Enter")) - db_vca = None db_vca_update = {} + operation_state = "FAILED" + operation_details = "" try: self.logger.debug( "Task vca_create={} {}".format(vca_id, "Getting vca from db") ) db_vca = self._get_vca_by_id(vca_id) - task = asyncio.ensure_future( - asyncio.wait_for( - self.n2vc.validate_vca(db_vca["_id"]), - timeout=self.timeout_create, - ) - ) - - await asyncio.wait([task], return_when=asyncio.FIRST_COMPLETED) - if task.exception(): - raise task.exception() + await self._validate_vca(db_vca["_id"]) self.logger.debug( "Task vca_create={} {}".format( vca_id, "vca registered and validated successfully" @@ -1510,7 +1533,6 @@ class VcaLcm(LcmBase): self.logger.error("Task vca_create={} {}".format(vca_id, error_msg)) db_vca_update["_admin.operationalState"] = "ERROR" db_vca_update["_admin.detailed-status"] = error_msg - operation_state = "FAILED" operation_details = error_msg finally: try: @@ -1532,6 +1554,70 @@ class VcaLcm(LcmBase): ) self.lcm_tasks.remove("vca", vca_id, order_id) + async def edit(self, vca_content, order_id): + op_id = vca_content.pop("op_id", None) + if not self.lcm_tasks.lock_HA("vca", "edit", op_id): + return + + vca_id = vca_content["_id"] + self.logger.debug("Task vca_edit={} {}".format(vca_id, "Enter")) + + db_vca = None + db_vca_update = {} + + operation_state = "FAILED" + operation_details = "" + try: + self.logger.debug( + "Task vca_edit={} {}".format(vca_id, "Getting vca from db") + ) + db_vca = self._get_vca_by_id(vca_id) + if self._is_vca_config_update(vca_content): + await self._validate_vca(db_vca["_id"]) + self.logger.debug( + "Task vca_edit={} {}".format( + vca_id, "vca registered and validated successfully" + ) + ) + db_vca_update["_admin.operationalState"] = "ENABLED" + db_vca_update["_admin.detailed-status"] = "Connectivity: ok" + + operation_details = "Edited" + operation_state = "COMPLETED" + + self.logger.debug( + "Task vca_edit={} {}".format( + vca_id, "Done. Result: {}".format(operation_state) + ) + ) + + except Exception as e: + error_msg = "Failed with exception: {}".format(e) + self.logger.error("Task vca_edit={} {}".format(vca_id, error_msg)) + db_vca_update["_admin.operationalState"] = "ERROR" + db_vca_update["_admin.detailed-status"] = error_msg + operation_state = "FAILED" + operation_details = error_msg + finally: + try: + self.update_db_2("vca", vca_id, db_vca_update) + + # Register the operation and unlock + self.lcm_tasks.unlock_HA( + "vca", + "edit", + op_id, + operationState=operation_state, + detailed_status=operation_details, + ) + except DbException as e: + self.logger.error( + "Task vca_edit={} {}".format( + vca_id, "Cannot update database: {}".format(e) + ) + ) + self.lcm_tasks.remove("vca", vca_id, order_id) + async def delete(self, vca_content, order_id): # HA tasks and backward compatibility: @@ -1545,6 +1631,9 @@ class VcaLcm(LcmBase): db_vca_update = {} vca_id = vca_content["_id"] + operation_state = "FAILED" + operation_details = "" + try: self.logger.debug( "Task vca_delete={} {}".format(vca_id, "Deleting vca from db") @@ -1564,7 +1653,6 @@ class VcaLcm(LcmBase): self.logger.error("Task vca_delete={} {}".format(vca_id, error_msg)) db_vca_update["_admin.operationalState"] = "ERROR" db_vca_update["_admin.detailed-status"] = error_msg - operation_state = "FAILED" operation_details = error_msg finally: try: