X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=juju%2Fclient%2Fconnection.py;h=f0737ca320a44576330a7c47785e5d54f1a695ba;hb=6f9041acecc03eaf12a6c8e5d50d20d17a28e87f;hp=18111ce11afed98b640d95e09596ed1aca43d3ef;hpb=bff25756a31f77bb27f1a3c48889d4188e430bd3;p=osm%2FN2VC.git diff --git a/juju/client/connection.py b/juju/client/connection.py index 18111ce..f0737ca 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['facades']) + self.info = response.copy() + return response async def redirect_info(self): try: