X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=n2vc%2Fn2vc_juju_conn.py;h=b2ffa0a22baf6cf1a44bc7f789f19d1ccb1a8622;hb=513cb2d19abfbe5b3aea879bf1a0561ea211e7d4;hp=f077b4041d3f4c47b7787095614c38f5ab47952f;hpb=1423ffa1a26780a50e58c83ed3aa2c97aec9db15;p=osm%2FN2VC.git diff --git a/n2vc/n2vc_juju_conn.py b/n2vc/n2vc_juju_conn.py index f077b40..b2ffa0a 100644 --- a/n2vc/n2vc_juju_conn.py +++ b/n2vc/n2vc_juju_conn.py @@ -794,8 +794,9 @@ class N2VCJujuConnector(N2VCConnector): will_not_delete = False if namespace not in self.delete_namespace_locks: self.delete_namespace_locks[namespace] = asyncio.Lock(loop=self.loop) + delete_lock = self.delete_namespace_locks[namespace] - while self.delete_namespace_locks[namespace].locked(): + while delete_lock.locked(): will_not_delete = True await asyncio.sleep(0.1) @@ -804,7 +805,7 @@ class N2VCJujuConnector(N2VCConnector): return try: - async with self.delete_namespace_locks[namespace]: + async with delete_lock: libjuju = await self._get_libjuju(vca_id) # check arguments @@ -828,6 +829,7 @@ class N2VCJujuConnector(N2VCConnector): model_name=model, total_timeout=total_timeout ) except Exception as e: + self.log.error(f"Error deleting namespace {namespace} : {e}") raise N2VCException( message="Error deleting namespace {} : {}".format( namespace, e @@ -838,6 +840,9 @@ class N2VCJujuConnector(N2VCConnector): message="only ns_id is permitted to delete yet", bad_args=["namespace"], ) + except Exception as e: + self.log.error(f"Error deleting namespace {namespace} : {e}") + raise e finally: self.delete_namespace_locks.pop(namespace) self.log.info("Namespace {} deleted".format(namespace)) @@ -1067,6 +1072,68 @@ class N2VCJujuConnector(N2VCConnector): primitive_name=primitive_name, ) + async def upgrade_charm( + self, + ee_id: str = None, + path: str = None, + charm_id: str = None, + charm_type: str = None, + timeout: float = None, + ) -> str: + """This method upgrade charms in VNFs + + Args: + ee_id: Execution environment id + path: Local path to the charm + charm_id: charm-id + charm_type: Charm type can be lxc-proxy-charm, native-charm or k8s-proxy-charm + timeout: (Float) Timeout for the ns update operation + + Returns: + The output of the update operation if status equals to "completed" + + """ + self.log.info("Upgrading charm: {} on ee: {}".format(path, ee_id)) + libjuju = await self._get_libjuju(charm_id) + + # check arguments + if ee_id is None or len(ee_id) == 0: + raise N2VCBadArgumentsException( + message="ee_id is mandatory", bad_args=["ee_id"] + ) + try: + ( + model_name, + application_name, + machine_id, + ) = N2VCJujuConnector._get_ee_id_components(ee_id=ee_id) + + except Exception: + raise N2VCBadArgumentsException( + message="ee_id={} is not a valid execution environment id".format( + ee_id + ), + bad_args=["ee_id"], + ) + + try: + + await libjuju.upgrade_charm( + application_name=application_name, + path=path, + model_name=model_name, + total_timeout=timeout, + ) + + return f"Charm upgraded with application name {application_name}" + + except Exception as e: + self.log.error("Error upgrading charm {}: {}".format(path, e)) + + raise N2VCException( + message="Error upgrading charm {} in ee={} : {}".format(path, ee_id, e) + ) + async def disconnect(self, vca_id: str = None): """ Disconnect from VCA