From 761ff6c67d071f499e947d59dcbbe1c0348481ef Mon Sep 17 00:00:00 2001 From: Cory Johns Date: Thu, 5 Jan 2017 16:50:10 -0500 Subject: [PATCH] Add ability to get cloud for controller Also use this as default when just a credential is given --- juju/controller.py | 17 +++++++++++++---- juju/model.py | 5 ++++- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/juju/controller.py b/juju/controller.py index 6331c12..cf7c2ce 100644 --- a/juju/controller.py +++ b/juju/controller.py @@ -76,10 +76,9 @@ class Controller(object): model_facade.connect(self.connection) owner = owner or self.connection.info['user-info']['identity'] + cloud_name = cloud_name or await self.get_cloud() - # XXX: We should be able to accept a credential_name without - # a cloud_name, and just get the cloud_name from the controller. - if credential_name and cloud_name: + if credential_name: credential = tag.credential( cloud_name, tag.untag('user-', owner), @@ -88,7 +87,6 @@ class Controller(object): else: credential = None - log.debug('Creating model %s', model_name) model_info = await model_facade.CreateModel( @@ -183,6 +181,17 @@ class Controller(object): """ pass + async def get_cloud(self): + """ + Get the name of the cloud that this controller lives on. + """ + cloud_facade = client.CloudFacade() + cloud_facade.connect(self.connection) + + result = await cloud_facade.Clouds() + cloud = list(result.clouds.keys())[0] # only lives on one cloud + return tag.untag('cloud-', cloud) + def get_models(self, all_=False, username=None): """Return list of available models on this controller. diff --git a/juju/model.py b/juju/model.py index ecd764b..c2b23d1 100644 --- a/juju/model.py +++ b/juju/model.py @@ -931,7 +931,10 @@ class Model(object): storage=storage, ) - await app_facade.Deploy([app]) + result = await app_facade.Deploy([app]) + errors = [r.error.message for r in result.results if r.error] + if errors: + raise JujuError('\n'.join(errors)) return await self._wait_for_new('application', application_name) def destroy(self): -- 2.25.1