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
This commit is contained in:
Tang Chen 2015-11-06 17:28:03 +08:00
parent 6e1ad73723
commit fc32b0d76b

View File

@ -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,
},