X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=juju%2Fclient%2Fconnection.py;h=452754e3f960f0ce32f7151cc9423bd99ef32e76;hb=0a3b685af80dc92e039241b17e712b15994f5769;hp=18111ce11afed98b640d95e09596ed1aca43d3ef;hpb=77cdb181bdeefd6f33b769dbed0d0c9ca2277006;p=osm%2FN2VC.git diff --git a/juju/client/connection.py b/juju/client/connection.py index 18111ce..452754e 100644 --- a/juju/client/connection.py +++ b/juju/client/connection.py @@ -135,8 +135,7 @@ class Connection: redirect_info = await client.redirect_info() if not redirect_info: - server_info = await client.login(username, password, macaroons) - client.build_facades(server_info['facades']) + await client.login(username, password, macaroons) return client await client.close() @@ -153,7 +152,6 @@ class Connection: result = await client.login(username, password, macaroons) if 'discharge-required-error' in result: continue - client.build_facades(result['facades']) return client except Exception as e: await client.close() @@ -175,6 +173,33 @@ class Connection: return await cls.connect_model( '{}:{}'.format(controller_name, model_name)) + @classmethod + async def connect_current_controller(cls): + """Connect to the currently active controller. + + """ + jujudata = JujuData() + controller_name = jujudata.current_controller() + + return await cls.connect_controller(controller_name) + + @classmethod + async def connect_controller(cls, controller_name): + """Connect to a controller by name. + + """ + jujudata = JujuData() + controller = jujudata.controllers()[controller_name] + endpoint = controller['api-endpoints'][0] + cacert = controller.get('ca-cert') + accounts = jujudata.accounts()[controller_name] + username = accounts['user'] + password = accounts.get('password') + macaroons = get_macaroons() if not password else None + + return await cls.connect( + endpoint, None, username, password, cacert, macaroons) + @classmethod async def connect_model(cls, model): """Connect to a model by name. @@ -221,7 +246,10 @@ class Connection: "nonce": "".join(random.sample(string.printable, 12)), "macaroons": macaroons or [] }}) - return result['response'] + response = result['response'] + self.build_facades(response.get('facades', {})) + self.info = response.copy() + return response async def redirect_info(self): try: