From 4cd05c64dd394485ff119e805912496686d61bbb Mon Sep 17 00:00:00 2001 From: Mitsuhiro Tanino Date: Tue, 7 Feb 2017 19:31:35 -0500 Subject: [PATCH] Add start_version check for do_list() image_metadata option The image_metadata options requires Cinder API v3.4, but user can specify this option before API v3.4 then the option will be ignored without any warning message. We should check this option using start_version to avoid confusion. Change-Id: I6983494cb6653a9eaf35f4eedba87aeb70b55260 --- cinderclient/tests/unit/v3/test_shell.py | 7 ++++++- cinderclient/v3/shell.py | 3 ++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/cinderclient/tests/unit/v3/test_shell.py b/cinderclient/tests/unit/v3/test_shell.py index bafc847..152cc56 100644 --- a/cinderclient/tests/unit/v3/test_shell.py +++ b/cinderclient/tests/unit/v3/test_shell.py @@ -385,8 +385,13 @@ class ShellTest(utils.TestCase): self.run_command('--os-volume-api-version 3.5 message-list --marker=1') self.assert_called('GET', '/messages?marker=1') + def test_list_with_image_metadata_before_3_4(self): + self.assertRaises(exceptions.UnsupportedAttribute, + self.run_command, + 'list --image_metadata image_name=1234') + def test_list_filter_image_metadata(self): - self.run_command('--os-volume-api-version 3.0 ' + self.run_command('--os-volume-api-version 3.4 ' 'list --image_metadata image_name=1234') url = ('/volumes/detail?%s' % parse.urlencode([('glance_metadata', {"image_name": "1234"})])) diff --git a/cinderclient/v3/shell.py b/cinderclient/v3/shell.py index 2c8852a..debdd4f 100644 --- a/cinderclient/v3/shell.py +++ b/cinderclient/v3/shell.py @@ -82,6 +82,7 @@ from cinderclient.v2.shell import * # flake8: noqa nargs='*', metavar='', default=None, + start_version='3.4', help='Filters results by a image metadata key and value pair. Require ' 'volume api version >=3.4. Default=None.') @utils.arg('--marker', @@ -141,7 +142,7 @@ def do_list(cs, args): if args.metadata else None, 'glance_metadata': shell_utils.extract_metadata(args, type='image_metadata') - if args.image_metadata else None, + if hasattr(args, 'image_metadata') and args.image_metadata else None, 'group_id': getattr(args, 'group_id', None), }