summaryrefslogtreecommitdiff
path: root/openstackclient/volume
diff options
context:
space:
mode:
authorSteve Martinelli <stevemar@ca.ibm.com>2014-12-22 13:20:41 -0500
committerSteve Martinelli <stevemar@ca.ibm.com>2014-12-22 13:20:41 -0500
commit71d9c8b5b343011bb0c9d90dab9cb75510d4c618 (patch)
tree1f6589f23ad5fd53f35699ff03526e4fc49695ea /openstackclient/volume
parent52d22359f100c287c375edc73b6c4bd61be4c8da (diff)
downloadpython-openstackclient-71d9c8b5b343011bb0c9d90dab9cb75510d4c618.tar.gz
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
Diffstat (limited to 'openstackclient/volume')
-rw-r--r--openstackclient/volume/v1/volume.py41
1 files changed, 35 insertions, 6 deletions
diff --git a/openstackclient/volume/v1/volume.py b/openstackclient/volume/v1/volume.py
index 84c216d3..b78779bd 100644
--- a/openstackclient/volume/v1/volume.py
+++ b/openstackclient/volume/v1/volume.py
@@ -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))