Add ability to filter image list by tag
Change-Id: I2e222d3e69df9d8d7cd472663caaee31bedd848c
This commit is contained in:
parent
9766eb23e7
commit
9edbab8c90
@ -209,6 +209,7 @@ List available images
|
||||
[--property <key=value>]
|
||||
[--name <name>]
|
||||
[--status <status>]
|
||||
[--tag <tag>]
|
||||
[--long]
|
||||
[--sort <key>[:<direction>]]
|
||||
[--limit <num-images>]
|
||||
@ -244,6 +245,12 @@ List available images
|
||||
|
||||
*Image version 2 only*
|
||||
|
||||
.. option:: --tag <tag>
|
||||
|
||||
Filter images based on tag
|
||||
|
||||
*Image version 2 only*
|
||||
|
||||
.. option:: --long
|
||||
|
||||
List additional fields in output
|
||||
|
@ -464,6 +464,12 @@ class ListImage(command.Lister):
|
||||
default=None,
|
||||
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',
|
||||
@ -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',
|
||||
|
@ -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):
|
||||
|
@ -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):
|
||||
|
||||
|
@ -0,0 +1,4 @@
|
||||
---
|
||||
features:
|
||||
- |
|
||||
Add ``--tag`` option to ``image list`` command to filter by tag.
|
Loading…
Reference in New Issue
Block a user