summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/image/v2/image.py8
-rw-r--r--openstackclient/tests/functional/image/v2/test_image.py29
-rw-r--r--openstackclient/tests/unit/image/v2/test_image.py14
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):