diff --git a/akanda/rug/cli/router.py b/akanda/rug/cli/router.py index f3341ca6..e25d3b24 100644 --- a/akanda/rug/cli/router.py +++ b/akanda/rug/cli/router.py @@ -24,7 +24,7 @@ import sys from akanda.rug.common.i18n import _LW from akanda.rug import commands from akanda.rug.cli import message -from akanda.rug.api import nova, neutron +from akanda.rug.api import keystone, nova from novaclient import exceptions from oslo_config import cfg @@ -160,22 +160,18 @@ class RouterSSH(_TenantRouterCmd): return p def take_action(self, parsed_args): - n_c = client.Client( - username=self.app.rug_ini.admin_user, - password=self.app.rug_ini.admin_password, - tenant_name=self.app.rug_ini.admin_tenant_name, - auth_url=self.app.rug_ini.auth_url, - auth_strategy=self.app.rug_ini.auth_strategy, - region_name=self.app.rug_ini.auth_region, - ) + ks_session = keystone.KeystoneSession() + n_c = client.Client(session=ks_session.session) router_id = parsed_args.router_id.lower() - ports = n_c.show_router(router_id).get('router', {}).get('ports', {}) - for port in ports: - if port['fixed_ips'] and \ - port['device_owner'] == neutron.DEVICE_OWNER_ROUTER_MGT: - v6_addr = port['fixed_ips'].pop()['ip_address'] - try: - cmd = ["ssh", "root@%s" % v6_addr] + parsed_args.remainder - subprocess.check_call(cmd) - except subprocess.CalledProcessError as e: - sys.exit(e.returncode) + port = n_c.list_ports(name="AKANDA:MGT:%s" % router_id) + try: + mgmt_ip_addr = port['ports'][0]['fixed_ips'].pop()['ip_address'] + except (KeyError, IndexError): + raise ValueError( + "No router management address found for router with id %s" + % router_id) + try: + cmd = ["ssh", "astara@%s" % mgmt_ip_addr] + parsed_args.remainder + subprocess.check_call(cmd) + except subprocess.CalledProcessError as e: + sys.exit(e.returncode)