Volume detail support glance_metadata in CLI

Add supporting to allow list volumes
filtering by glance_metadata.

Cinder code has merged, support it in client.

Change-Id: Ifc2124b88c4199700d91a89c9fe68598630877db
Implements: blueprint support-volume-glance-metadata-query
This commit is contained in:
wanghao
2016-05-27 12:27:49 +08:00
parent df81163fce
commit a3c5e06693
2 changed files with 22 additions and 3 deletions

View File

@@ -186,6 +186,12 @@ class ShellTest(utils.TestCase):
self.run_command('list --name=1234')
self.assert_called('GET', '/volumes/detail?name=1234')
def test_list_filter_image_metadata(self):
self.run_command('list --image_metadata image_name=1234')
url = ('/volumes/detail?%s' %
parse.urlencode([('glance_metadata', {"image_name": "1234"})]))
self.assert_called('GET', url)
def test_list_all_tenants(self):
self.run_command('list --all-tenants=1')
self.assert_called('GET', '/volumes/detail?all_tenants=1')

View File

@@ -128,9 +128,13 @@ def _translate_availability_zone_keys(collection):
_translate_keys(collection, convert)
def _extract_metadata(args):
def _extract_metadata(args, type='user_metadata'):
metadata = {}
for metadatum in args.metadata:
if type == 'image_metadata':
args_metadata = args.image_metadata
else:
args_metadata = args.metadata
for metadatum in args_metadata:
# unset doesn't require a val, so we have the if/else
if '=' in metadatum:
(key, value) = metadatum.split('=', 1)
@@ -181,7 +185,14 @@ def _extract_metadata(args):
nargs='*',
metavar='<key=value>',
default=None,
help='Filters results by a metadata key and value pair. '
help='Filters results by a metadata key and value pair. Require '
'volume api version >=3.4. Default=None.')
@utils.arg('--image_metadata',
type=str,
nargs='*',
metavar='<key=value>',
default=None,
help='Filters results by a image metadata key and value pair. '
'Default=None.')
@utils.arg('--marker',
metavar='<marker>',
@@ -238,6 +249,8 @@ def do_list(cs, args):
'bootable': args.bootable,
'migration_status': args.migration_status,
'metadata': _extract_metadata(args) if args.metadata else None,
'glance_metadata': _extract_metadata(args, type='image_metadata')
if args.image_metadata else None,
}
# If unavailable/non-existent fields are specified, these fields will