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:
@@ -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')
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user