image-list should support filters 'name','status'

nova api support parameters like 'name', 'server', 'status',
etc in image-list(). So openstackclient should support this too.

DocImpact
Closes-Bug: #1698742
Change-Id: Ice66b409f989e6785aa3b2d42f2fdbf6e23fa0aa
This commit is contained in:
nidhimittalhada 2017-06-19 11:37:12 +05:30 committed by Steve Martinelli
parent 3cba09e767
commit bca8d57eb3
5 changed files with 80 additions and 0 deletions

View File

@ -209,6 +209,9 @@ List available images
[--sort <key>[:<direction>]] [--sort <key>[:<direction>]]
[--limit <num-images>] [--limit <num-images>]
[--marker <image>] [--marker <image>]
[--name <name>]
[--status <status>]
.. option:: --public .. option:: --public
@ -248,6 +251,15 @@ List available images
The last image of the previous page. Display list of images The last image of the previous page. Display list of images
after marker. Display all images if not specified. (name or ID) after marker. Display all images if not specified. (name or ID)
.. option:: --name <name>
Filter images based on name
.. option:: --status <status>
Filter images based on status
*Image version 2 only* *Image version 2 only*
image remove project image remove project

View File

@ -452,6 +452,18 @@ class ListImage(command.Lister):
action=parseractions.KeyValueAction, action=parseractions.KeyValueAction,
help=_('Filter output based on property'), help=_('Filter output based on property'),
) )
parser.add_argument(
'--name',
metavar='<name>',
default=None,
help=_("Filter images based on name.")
)
parser.add_argument(
'--status',
metavar='<status>',
default=None,
help=_("Filter images based on status.")
)
parser.add_argument( parser.add_argument(
'--long', '--long',
action='store_true', action='store_true',
@ -505,6 +517,10 @@ class ListImage(command.Lister):
if parsed_args.marker: if parsed_args.marker:
kwargs['marker'] = utils.find_resource(image_client.images, kwargs['marker'] = utils.find_resource(image_client.images,
parsed_args.marker).id parsed_args.marker).id
if parsed_args.name:
kwargs['name'] = parsed_args.name
if parsed_args.status:
kwargs['status'] = parsed_args.status
if parsed_args.long: if parsed_args.long:
columns = ( columns = (
'ID', 'ID',

View File

@ -51,6 +51,24 @@ class ImageTests(base.TestCase):
[img['Name'] for img in json_output] [img['Name'] for img in json_output]
) )
def test_image_list_with_name_filter(self):
json_output = json.loads(self.openstack(
'image list --name ' + self.NAME + ' -f json'
))
self.assertIn(
self.NAME,
[img['Name'] for img in json_output]
)
def test_image_list_with_status_filter(self):
json_output = json.loads(self.openstack(
'image list ' + ' --status active -f json'
))
self.assertIn(
'active',
[img['Status'] for img in json_output]
)
def test_image_attributes(self): def test_image_attributes(self):
"""Test set, unset, show on attributes, tags and properties""" """Test set, unset, show on attributes, tags and properties"""

View File

@ -750,6 +750,34 @@ class TestImageList(TestImage):
marker=image_fakes.image_id, marker=image_fakes.image_id,
) )
def test_image_list_name_option(self):
arglist = [
'--name', 'abc',
]
verifylist = [
('name', '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(
name='abc', marker=self._image.id
)
def test_image_list_status_option(self):
arglist = [
'--status', 'active',
]
verifylist = [
('status', 'active'),
]
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(
status='active', marker=self._image.id
)
class TestRemoveProjectImage(TestImage): class TestRemoveProjectImage(TestImage):

View File

@ -0,0 +1,6 @@
---
features:
- |
Add ``--name`` and ``--status`` options to ``image list`` command
to filter images based on name and status respectively.
[Bug `1698742 <https://bugs.launchpad.net/bugs/1698742>`_]