From fc32b0d76bf07cb5bd43f2f9dc0078438a9ae351 Mon Sep 17 00:00:00 2001 From: Tang Chen <tangchen@cn.fujitsu.com> Date: Fri, 6 Nov 2015 17:28:03 +0800 Subject: [PATCH] Improve "server list" command to have the same output as "nova list". "nova list" will also output "Task State" and "Power State" by default. This patch improves "server list" command to have the same columns, but not by default. These two columns will be output if --long is added. The power state is an int, so also adds a formatter helper function to translate it to human readable string, just as "Networks" does. Change-Id: I0530a910bec03835839a5ba7687c66d5643338f3 --- openstackclient/compute/v2/server.py | 45 ++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py index b5e7f004b8..1112393141 100644 --- a/openstackclient/compute/v2/server.py +++ b/openstackclient/compute/v2/server.py @@ -56,6 +56,29 @@ def _format_servers_list_networks(networks): return '; '.join(output) +def _format_servers_list_power_state(state): + """Return a formatted string of a server's power state + + :param state: the power state number of a server + :rtype: a string mapped to the power state number + """ + power_states = [ + 'NOSTATE', # 0x00 + 'Running', # 0x01 + '', # 0x02 + 'Paused', # 0x03 + 'Shutdown', # 0x04 + '', # 0x05 + 'Crashed', # 0x06 + 'Suspended' # 0x07 + ] + + try: + return power_states[state] + except Exception: + return 'N/A' + + def _get_ip_address(addresses, address_type, ip_address_family): # Old style addresses if address_type in addresses: @@ -762,6 +785,8 @@ class ListServer(lister.Lister): 'ID', 'Name', 'Status', + 'OS-EXT-STS:task_state', + 'OS-EXT-STS:power_state', 'Networks', 'OS-EXT-AZ:availability_zone', 'OS-EXT-SRV-ATTR:host', @@ -771,18 +796,32 @@ class ListServer(lister.Lister): 'ID', 'Name', 'Status', + 'Task State', + 'Power State', 'Networks', 'Availability Zone', 'Host', 'Properties', ) mixed_case_fields = [ + 'OS-EXT-STS:task_state', + 'OS-EXT-STS:power_state', 'OS-EXT-AZ:availability_zone', 'OS-EXT-SRV-ATTR:host', ] else: - columns = ('ID', 'Name', 'Status', 'Networks') - column_headers = columns + columns = ( + 'ID', + 'Name', + 'Status', + 'Networks', + ) + column_headers = ( + 'ID', + 'Name', + 'Status', + 'Networks', + ) mixed_case_fields = [] data = compute_client.servers.list(search_opts=search_opts) return (column_headers, @@ -790,6 +829,8 @@ class ListServer(lister.Lister): s, columns, mixed_case_fields=mixed_case_fields, formatters={ + 'OS-EXT-STS:power_state': + _format_servers_list_power_state, 'Networks': _format_servers_list_networks, 'Metadata': utils.format_dict, },