diff options
Diffstat (limited to 'openstackclient')
| -rw-r--r-- | openstackclient/image/v2/image.py | 8 | ||||
| -rw-r--r-- | openstackclient/tests/functional/image/v2/test_image.py | 29 | ||||
| -rw-r--r-- | openstackclient/tests/unit/image/v2/test_image.py | 14 |
3 files changed, 44 insertions, 7 deletions
diff --git a/openstackclient/image/v2/image.py b/openstackclient/image/v2/image.py index 4a51062f..4c7c815f 100644 --- a/openstackclient/image/v2/image.py +++ b/openstackclient/image/v2/image.py @@ -465,6 +465,12 @@ class ListImage(command.Lister): help=_("Filter images based on status.") ) parser.add_argument( + '--tag', + metavar='<tag>', + default=None, + help=_('Filter images based on tag.'), + ) + parser.add_argument( '--long', action='store_true', default=False, @@ -521,6 +527,8 @@ class ListImage(command.Lister): kwargs['name'] = parsed_args.name if parsed_args.status: kwargs['status'] = parsed_args.status + if parsed_args.tag: + kwargs['tag'] = parsed_args.tag if parsed_args.long: columns = ( 'ID', diff --git a/openstackclient/tests/functional/image/v2/test_image.py b/openstackclient/tests/functional/image/v2/test_image.py index 278ba5b9..3037b903 100644 --- a/openstackclient/tests/functional/image/v2/test_image.py +++ b/openstackclient/tests/functional/image/v2/test_image.py @@ -28,10 +28,11 @@ class ImageTests(base.TestCase): @classmethod def setUpClass(cls): super(ImageTests, cls).setUpClass() + cls.image_tag = 'my_tag' json_output = json.loads(cls.openstack( '--os-image-api-version 2 ' - 'image create -f json ' + - cls.NAME + 'image create -f json --tag {tag} {name}'.format( + tag=cls.image_tag, name=cls.NAME) )) cls.image_id = json_output["id"] cls.assertOutput(cls.NAME, json_output['name']) @@ -81,6 +82,16 @@ class ImageTests(base.TestCase): [img['Status'] for img in json_output] ) + def test_image_list_with_tag_filter(self): + json_output = json.loads(self.openstack( + 'image list --tag ' + self.image_tag + ' --long -f json' + )) + for taglist in [img['Tags'].split(', ') for img in json_output]: + self.assertIn( + self.image_tag, + taglist + ) + def test_image_attributes(self): """Test set, unset, show on attributes, tags and properties""" @@ -142,6 +153,10 @@ class ImageTests(base.TestCase): ) # Test tags + self.assertNotIn( + '01', + json_output["tags"].split(', ') + ) self.openstack( 'image set ' + '--tag 01 ' + @@ -151,9 +166,9 @@ class ImageTests(base.TestCase): 'image show -f json ' + self.NAME )) - self.assertEqual( + self.assertIn( '01', - json_output["tags"], + json_output["tags"].split(', ') ) self.openstack( @@ -165,9 +180,9 @@ class ImageTests(base.TestCase): 'image show -f json ' + self.NAME )) - self.assertEqual( - '', - json_output["tags"], + self.assertNotIn( + '01', + json_output["tags"].split(', ') ) def test_image_set_rename(self): diff --git a/openstackclient/tests/unit/image/v2/test_image.py b/openstackclient/tests/unit/image/v2/test_image.py index 301cd037..b769d1f6 100644 --- a/openstackclient/tests/unit/image/v2/test_image.py +++ b/openstackclient/tests/unit/image/v2/test_image.py @@ -779,6 +779,20 @@ class TestImageList(TestImage): status='active', marker=self._image.id ) + def test_image_list_tag_option(self): + arglist = [ + '--tag', 'abc', + ] + verifylist = [ + ('tag', 'abc'), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + columns, data = self.cmd.take_action(parsed_args) + self.api_mock.image_list.assert_called_with( + tag='abc', marker=self._image.id + ) + class TestListImageProjects(TestImage): |
