X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FN2VC.git;a=blobdiff_plain;f=n2vc%2Flibjuju.py;h=aa7afa10ea2938940a5d70906c17efeeb61a3b23;hp=47024149e1bcf024edfc461eeea644b51e2b2d17;hb=667696ef11356f3267df58f2a81c6ecebb0e94b9;hpb=a4f57d6260e6520aa6a89e86f9d1b2ca5e0a3a08 diff --git a/n2vc/libjuju.py b/n2vc/libjuju.py index 4702414..aa7afa1 100644 --- a/n2vc/libjuju.py +++ b/n2vc/libjuju.py @@ -165,7 +165,8 @@ class Libjuju: :param: controller: Controller that will be disconnected """ - await controller.disconnect() + if controller: + await controller.disconnect() async def add_model(self, model_name: str, cloud_name: str, credential_name=None): """ @@ -491,6 +492,28 @@ class Libjuju: return machine_id + async def deploy( + self, uri: str, model_name: str, wait: bool = True, timeout: float = 3600 + ): + """ + Deploy bundle or charm: Similar to the juju CLI command `juju deploy` + + :param: uri: Path or Charm Store uri in which the charm or bundle can be found + :param: model_name: Model name + :param: wait: Indicates whether to wait or not until all applications are active + :param: timeout: Time in seconds to wait until all applications are active + """ + controller = await self.get_controller() + model = await self.get_model(controller, model_name) + try: + await model.deploy(uri) + if wait: + await JujuModelWatcher.wait_for_model(model, timeout=timeout) + self.log.debug("All units active in model {}".format(model_name)) + finally: + await self.disconnect_model(model) + await self.disconnect_controller(controller) + async def deploy_charm( self, application_name: str, @@ -1001,6 +1024,7 @@ class Libjuju: :param: interval: Time in seconds between checks """ + controller = None while True: try: controller = await self.get_controller() @@ -1141,7 +1165,7 @@ class Libjuju: auth_type = "certificate" else: raise JujuInvalidK8sConfiguration("authentication method not supported") - return client.CloudCredential(auth_type=auth_type, attrs=attrs,) + return client.CloudCredential(auth_type=auth_type, attrs=attrs) async def add_cloud( self,