Properly format 'attached to' column list when listing volumes

Previously, no data was being returned for the 'attached to' field
when listing volumes. Dig into the the returned array to format
the column.

Change-Id: Iebd79e5ddcb4a335703d9b2675aa7128995de918
Closes-Bug: #1404931
This commit is contained in:
Steve Martinelli 2014-12-22 13:20:41 -05:00
parent 52d22359f1
commit 71d9c8b5b3
1 changed files with 35 additions and 6 deletions

View File

@ -221,6 +221,25 @@ class ListVolume(lister.Lister):
def take_action(self, parsed_args):
self.log.debug('take_action(%s)', parsed_args)
volume_client = self.app.client_manager.volume
compute_client = self.app.client_manager.compute
def _format_attach(attachments):
"""Return a formatted string of a volume's attached instances
:param volume: a volume.attachments field
:rtype: a string of formatted instances
"""
msg = ''
for attachment in attachments:
server = attachment['server_id']
if server in server_cache.keys():
server = server_cache[server].name
device = attachment['device']
msg += 'Attached to %s on %s ' % (server, device)
return msg
if parsed_args.long:
columns = (
'ID',
@ -229,7 +248,7 @@ class ListVolume(lister.Lister):
'Size',
'Volume Type',
'Bootable',
'Attached to',
'Attachments',
'Metadata',
)
column_headers = (
@ -239,7 +258,7 @@ class ListVolume(lister.Lister):
'Size',
'Type',
'Bootable',
'Attached',
'Attached to',
'Properties',
)
else:
@ -248,28 +267,38 @@ class ListVolume(lister.Lister):
'Display Name',
'Status',
'Size',
'Attached to',
'Attachments',
)
column_headers = (
'ID',
'Display Name',
'Status',
'Size',
'Attached',
'Attached to',
)
# Cache the server list
server_cache = {}
try:
for s in compute_client.servers.list():
server_cache[s.id] = s
except Exception:
# Just forget it if there's any trouble
pass
search_opts = {
'all_tenants': parsed_args.all_projects,
'display_name': parsed_args.name,
'status': parsed_args.status,
}
volume_client = self.app.client_manager.volume
data = volume_client.volumes.list(search_opts=search_opts)
return (column_headers,
(utils.get_item_properties(
s, columns,
formatters={'Metadata': utils.format_dict},
formatters={'Metadata': utils.format_dict,
'Attachments': _format_attach},
) for s in data))