X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_lcm%2Fvim_sdn.py;h=ea25c2bdc4f5cdd2b39930d3c7eed6795c695647;hb=4d209f039b05c39750dd192095cffba9e3a80925;hp=d95df9486885e8c0b138ccc56e74efbb3cb1cf6d;hpb=411af2e5804302a45c911556a60fe702227fa799;p=osm%2FLCM.git diff --git a/osm_lcm/vim_sdn.py b/osm_lcm/vim_sdn.py index d95df94..ea25c2b 100644 --- a/osm_lcm/vim_sdn.py +++ b/osm_lcm/vim_sdn.py @@ -61,7 +61,6 @@ class VimLcm(LcmBase): super().__init__(msg, self.logger) async def create(self, vim_content, order_id): - # HA tasks and backward compatibility: # If 'vim_content' does not include 'op_id', we a running a legacy NBI version. # In such a case, HA is not supported by NBI, 'op_id' is None, and lock_HA() will do nothing. @@ -214,7 +213,6 @@ class VimLcm(LcmBase): self.lcm_tasks.remove("vim_account", vim_id, order_id) async def edit(self, vim_content, order_id): - # HA tasks and backward compatibility: # If 'vim_content' does not include 'op_id', we a running a legacy NBI version. # In such a case, HA is not supported by NBI, and the HA check always returns True @@ -370,7 +368,6 @@ class VimLcm(LcmBase): self.lcm_tasks.remove("vim_account", vim_id, order_id) async def delete(self, vim_content, order_id): - # HA tasks and backward compatibility: # If 'vim_content' does not include 'op_id', we a running a legacy NBI version. # In such a case, HA is not supported by NBI, and the HA check always returns True @@ -483,7 +480,6 @@ class WimLcm(LcmBase): super().__init__(msg, self.logger) async def create(self, wim_content, order_id): - # HA tasks and backward compatibility: # If 'wim_content' does not include 'op_id', we a running a legacy NBI version. # In such a case, HA is not supported by NBI, 'op_id' is None, and lock_HA() will do nothing. @@ -600,7 +596,6 @@ class WimLcm(LcmBase): self.lcm_tasks.remove("wim_account", wim_id, order_id) async def edit(self, wim_content, order_id): - # HA tasks and backward compatibility: # If 'wim_content' does not include 'op_id', we a running a legacy NBI version. # In such a case, HA is not supported by NBI, and the HA check always returns True @@ -628,7 +623,6 @@ class WimLcm(LcmBase): and db_wim["_admin"].get("deployed") and db_wim["_admin"]["deployed"].get("RO") ): - RO_wim_id = db_wim["_admin"]["deployed"]["RO"] step = "Editing wim at RO" RO = ROclient.ROClient(self.loop, **self.ro_config) @@ -721,7 +715,6 @@ class WimLcm(LcmBase): self.lcm_tasks.remove("wim_account", wim_id, order_id) async def delete(self, wim_content, order_id): - # HA tasks and backward compatibility: # If 'vim_content' does not include 'op_id', we a running a legacy NBI version. # In such a case, HA is not supported by NBI, and the HA check always returns True @@ -831,7 +824,6 @@ class SdnLcm(LcmBase): super().__init__(msg, self.logger) async def create(self, sdn_content, order_id): - # HA tasks and backward compatibility: # If 'sdn_content' does not include 'op_id', we a running a legacy NBI version. # In such a case, HA is not supported by NBI, 'op_id' is None, and lock_HA() will do nothing. @@ -912,7 +904,6 @@ class SdnLcm(LcmBase): self.lcm_tasks.remove("sdn", sdn_id, order_id) async def edit(self, sdn_content, order_id): - # HA tasks and backward compatibility: # If 'sdn_content' does not include 'op_id', we a running a legacy NBI version. # In such a case, HA is not supported by NBI, and the HA check always returns True @@ -994,7 +985,6 @@ class SdnLcm(LcmBase): self.lcm_tasks.remove("sdn", sdn_id, order_id) async def delete(self, sdn_content, order_id): - # HA tasks and backward compatibility: # If 'vim_content' does not include 'op_id', we a running a legacy NBI version. # In such a case, HA is not supported by NBI, and the HA check always returns True @@ -1127,7 +1117,6 @@ class K8sClusterLcm(LcmBase): } async def create(self, k8scluster_content, order_id): - op_id = k8scluster_content.pop("op_id", None) if not self.lcm_tasks.lock_HA("k8scluster", "create", op_id): return @@ -1299,8 +1288,33 @@ class K8sClusterLcm(LcmBase): self.logger.error(logging_text + "Cannot update database: {}".format(e)) self.lcm_tasks.remove("k8scluster", k8scluster_id, order_id) - async def delete(self, k8scluster_content, order_id): + async def edit(self, k8scluster_content, order_id): + op_id = k8scluster_content.pop("op_id", None) + if not self.lcm_tasks.lock_HA("k8scluster", "edit", op_id): + return + + k8scluster_id = k8scluster_content["_id"] + + logging_text = "Task k8scluster_edit={} ".format(k8scluster_id) + self.logger.debug(logging_text + "Enter") + + # TODO the implementation is pending and will be part of a new feature + # It will support rotation of certificates, update of credentials and K8S API endpoint + # At the moment the operation is set as completed + + operation_state = "COMPLETED" + operation_details = "Not implemented" + + self.lcm_tasks.unlock_HA( + "k8scluster", + "edit", + op_id, + operationState=operation_state, + detailed_status=operation_details, + ) + self.lcm_tasks.remove("k8scluster", k8scluster_id, order_id) + async def delete(self, k8scluster_content, order_id): # HA tasks and backward compatibility: # If 'vim_content' does not include 'op_id', we a running a legacy NBI version. # In such a case, HA is not supported by NBI, 'op_id' is None, and lock_HA() will do nothing. @@ -1466,6 +1480,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): @@ -1484,16 +1525,7 @@ class VcaLcm(LcmBase): ) 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" @@ -1536,8 +1568,71 @@ class VcaLcm(LcmBase): ) self.lcm_tasks.remove("vca", vca_id, order_id) - async def delete(self, vca_content, 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: # If "vim_content" does not include "op_id", we a running a legacy NBI version. # In such a case, HA is not supported by NBI, "op_id" is None, and lock_HA() will do nothing. @@ -1616,7 +1711,6 @@ class K8sRepoLcm(LcmBase): ) async def create(self, k8srepo_content, order_id): - # HA tasks and backward compatibility: # If 'vim_content' does not include 'op_id', we a running a legacy NBI version. # In such a case, HA is not supported by NBI, 'op_id' is None, and lock_HA() will do nothing. @@ -1681,7 +1775,6 @@ class K8sRepoLcm(LcmBase): self.lcm_tasks.remove("k8srepo", k8srepo_id, order_id) async def delete(self, k8srepo_content, order_id): - # HA tasks and backward compatibility: # If 'vim_content' does not include 'op_id', we a running a legacy NBI version. # In such a case, HA is not supported by NBI, 'op_id' is None, and lock_HA() will do nothing.