Adds extended status fields to nova list

The nova list command now includes 'Task State' and 'Power State' fields to
bring parity with the dashboard.

	* Add helper function _translate_extended_states()
	to convert extended states to human

Fixes: bug #954750

Change-Id: I564b7f88e9e2524d8e4ffe21a51608c5e3b23d2d
This commit is contained in:
Dave Wilde 2013-04-28 07:37:33 -05:00
parent 50fe79b47d
commit e009bec220
2 changed files with 39 additions and 5 deletions

View File

@ -380,6 +380,31 @@ def _translate_keys(collection, convert):
setattr(item, to_key, item._info[from_key])
def _translate_extended_states(collection):
power_states = [
'NOSTATE', # 0x00
'Running', # 0x01
'', # 0x02
'Paused', # 0x03
'Shutdown', # 0x04
'', # 0x05
'Crashed', # 0x06
'Suspended' # 0x07
]
for item in collection:
try:
setattr(item, 'power_state',
power_states[getattr(item, 'power_state')]
)
except AttributeError:
setattr(item, 'power_state', "N/A")
try:
getattr(item, 'task_state')
except AttributeError:
setattr(item, 'task_state', "N/A")
def _translate_flavor_keys(collection):
_translate_keys(collection, [('ram', 'memory_mb')])
@ -964,12 +989,21 @@ def do_list(cs, args):
convert = [('OS-EXT-SRV-ATTR:host', 'host'),
('OS-EXT-STS:task_state', 'task_state'),
('OS-EXT-SRV-ATTR:instance_name', 'instance_name'),
('OS-EXT-STS:power_state', 'power_state'),
('hostId', 'host_id')]
_translate_keys(servers, convert)
_translate_extended_states(servers)
if field_titles:
columns = [id_col] + field_titles
else:
columns = [id_col, 'Name', 'Status', 'Networks']
columns = [
id_col,
'Name',
'Status',
'Task State',
'Power State',
'Networks'
]
formatters['Networks'] = utils._format_servers_list_networks
utils.print_list(servers, columns,
formatters, sortby_index=1)

View File

@ -151,10 +151,10 @@ class ShellTest(utils.TestCase):
self.make_env(exclude='OS_PASSWORD')
stdout, stderr = self.shell('list')
self.assertEqual((stdout + stderr),
'+----+------+--------+----------+\n'
'| ID | Name | Status | Networks |\n'
'+----+------+--------+----------+\n'
'+----+------+--------+----------+\n')
'+----+------+--------+------------+-------------+----------+\n'
'| ID | Name | Status | Task State | Power State | Networks |\n'
'+----+------+--------+------------+-------------+----------+\n'
'+----+------+--------+------------+-------------+----------+\n')
@mock.patch('sys.stdin', side_effect=mock.MagicMock)
@mock.patch('getpass.getpass', side_effect=EOFError)