X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=n2vc%2Flibjuju.py;h=053aaa82c06238c74bf719215a8eb1b1b87296e6;hb=a8ceea3b6c2c24202649e08e45d4bc60b6446b1d;hp=4ee0abfe09573a932a0ffa6d149635d51f73b24f;hpb=f2e3383b1d6e7b10bb242a8dfc2149a96e234b6b;p=osm%2FN2VC.git diff --git a/n2vc/libjuju.py b/n2vc/libjuju.py index 4ee0abf..053aaa8 100644 --- a/n2vc/libjuju.py +++ b/n2vc/libjuju.py @@ -1267,10 +1267,10 @@ class Libjuju: try: await model.add_relation(endpoint_1, endpoint_2) except juju.errors.JujuAPIError as e: - if "not found" in e.message: + if self._relation_is_not_found(e): self.log.warning("Relation not found: {}".format(e.message)) return - if "already exists" in e.message: + if self._relation_already_exist(e): self.log.warning("Relation already exists: {}".format(e.message)) return # another exception, raise it @@ -1279,6 +1279,18 @@ class Libjuju: await self.disconnect_model(model) await self.disconnect_controller(controller) + def _relation_is_not_found(self, juju_error): + text = "not found" + return (text in juju_error.message) or ( + juju_error.error_code and text in juju_error.error_code + ) + + def _relation_already_exist(self, juju_error): + text = "already exists" + return (text in juju_error.message) or ( + juju_error.error_code and text in juju_error.error_code + ) + async def offer(self, endpoint: RelationEndpoint) -> Offer: """ Create an offer from a RelationEndpoint @@ -1422,14 +1434,17 @@ class Libjuju: self.log.info(f"Model {model_name} deleted forcefully") try: - await asyncio.wait_for( - _destroy_model_gracefully(model_name, controller), timeout=120 - ) - except asyncio.TimeoutError: - await _destroy_model_forcefully(model_name, controller) + try: + await asyncio.wait_for( + _destroy_model_gracefully(model_name, controller), timeout=120 + ) + except asyncio.TimeoutError: + await _destroy_model_forcefully(model_name, controller) except juju.errors.JujuError as e: if any("has been removed" in error for error in e.errors): return + if any("model not found" in error for error in e.errors): + return raise e async def destroy_application(