From 6b4e9c5c8b79671d6bdf633d22a61eda0638f01f Mon Sep 17 00:00:00 2001 From: root Date: Thu, 4 Aug 2011 18:39:21 +0000 Subject: [PATCH] formatting updates --- novaclient/utils.py | 2 -- novaclient/v1_1/servers.py | 33 ++++++------------------- novaclient/v1_1/shell.py | 50 +++++++++++++++++++++++++++++++------- 3 files changed, 49 insertions(+), 36 deletions(-) diff --git a/novaclient/utils.py b/novaclient/utils.py index 4397046d0..08fb70caf 100644 --- a/novaclient/utils.py +++ b/novaclient/utils.py @@ -39,5 +39,3 @@ def print_dict(d): pt.aligns = ['l', 'l'] [pt.add_row(list(r)) for r in d.iteritems()] pt.printt(sortby='Property') - - diff --git a/novaclient/v1_1/servers.py b/novaclient/v1_1/servers.py index cd649a4c6..e478ca4fe 100644 --- a/novaclient/v1_1/servers.py +++ b/novaclient/v1_1/servers.py @@ -105,34 +105,17 @@ class Server(base.Resource): self.manager.revert_resize(self) @property - def public_ip(self): + def networks(self): """ - Shortcut to get this server's primary public IP address. + Generate a simplified list of addresses """ + networks = {} try: - public_addresses = self.addresses["public"] - except KeyError: - public_addresses = None - - if public_addresses is None or len(public_addresses) == 0: - return "" - else: - return public_addresses - - @property - def private_ip(self): - """ - Shortcut to get this server's primary private IP address. - """ - try: - private_addresses = self.addresses["private"] - except KeyError: - private_addresses = None - - if private_addresses is None or len(private_addresses) == 0: - return "" - else: - return private_addresses + for network_label, address_list in self.addresses.items(): + networks[network_label] = [a['addr'] for a in address_list] + return networks + except Exception: + return {} class ServerManager(local_base.BootingManagerWithFind): diff --git a/novaclient/v1_1/shell.py b/novaclient/v1_1/shell.py index d906089aa..48ecbf44d 100644 --- a/novaclient/v1_1/shell.py +++ b/novaclient/v1_1/shell.py @@ -75,7 +75,20 @@ def do_boot(cs, args): name, image, flavor, metadata, files = _boot(cs, args) server = cs.servers.create(args.name, image, flavor, meta=metadata, files=files) - utils.print_dict(server._info) + info = server._info + + flavor = info.get('flavor', {}) + flavor_id = flavor.get('id', '') + info['flavor'] = _find_flavor(cs, flavor_id).name + + image = info.get('image', {}) + image_id = image.get('id', '') + info['image'] = _find_image(cs, image_id).name + + info.pop('links', None) + info.pop('addresses', None) + + utils.print_dict(info) def _boot(cs, args): @@ -203,12 +216,28 @@ def do_list(cs, args): 'name': args.name, 'server_name': args.server_name, 'display_name': args.display_name} + if recurse_zones: - to_print = ['UUID', 'Name', 'Status', 'Public IP', 'Private IP'] + id_col = 'UUID' else: - to_print = ['ID', 'Name', 'Status', 'Public IP', 'Private IP'] - utils.print_list(cs.servers.list(search_opts=search_opts), - to_print) + id_col = 'ID' + + columns = [id_col, 'Name', 'Status', 'Networks'] + formatters = {'Networks': _format_servers_list_networks} + utils.print_list(cs.servers.list(search_opts=search_opts), columns, formatters) + + +def _format_servers_list_networks(server): + output = [] + for (network, addresses) in server.networks.items(): + if len(addresses) == 0: + continue + addresses_csv = ', '.join(addresses) + group = "%s=%s" % (network, addresses_csv) + output.append(group) + + return '; '.join(output) + @utils.arg('--hard', dest='reboot_type', @@ -277,11 +306,11 @@ def do_show(cs, args): """Show details about the given server.""" s = _find_server(cs, args.server) + networks = s.networks + info = s._info.copy() - addresses = info.pop('addresses', []) - for addrtype in addresses: - ips = map(lambda x: x['addr'], addresses[addrtype]) - info['%s ip' % addrtype] = ', '.join(ips) + for network_label, address_list in networks.items(): + info['%s network' % network_label] = ', '.join(address_list) flavor = info.get('flavor', {}) flavor_id = flavor.get('id', '') @@ -291,6 +320,9 @@ def do_show(cs, args): image_id = image.get('id', '') info['image'] = _find_image(cs, image_id).name + info.pop('links', None) + info.pop('addresses', None) + utils.print_dict(info) @utils.arg('server', metavar='', help='Name or ID of server.')