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>]]
[--limit <num-images>]
[--marker <image>]
[--name <name>]
[--status <status>]
.. option:: --public
@ -248,6 +251,15 @@ List available images
The last image of the previous page. Display list of images
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 remove project

View File

@ -452,6 +452,18 @@ class ListImage(command.Lister):
action=parseractions.KeyValueAction,
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(
'--long',
action='store_true',
@ -505,6 +517,10 @@ class ListImage(command.Lister):
if parsed_args.marker:
kwargs['marker'] = utils.find_resource(image_client.images,
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:
columns = (
'ID',

View File

@ -51,6 +51,24 @@ class ImageTests(base.TestCase):
[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):
"""Test set, unset, show on attributes, tags and properties"""

View File

@ -750,6 +750,34 @@ class TestImageList(TestImage):
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):

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>`_]