From 860639a548a2c07193662cd361432cb5061c2a7f Mon Sep 17 00:00:00 2001 From: Nobuto Murata Date: Mon, 30 Apr 2018 14:32:08 +0900 Subject: [PATCH] Support --community in openstack image list "--community" was added to "image create" and "image set" previously, but was missed in "image list". Change-Id: I959fdd7f67ae62c8326659ce52389228152ec019 Story: 2001925 Task: 14453 --- doc/source/cli/command-objects/image.rst | 8 ++++- openstackclient/api/image_v2.py | 17 +++++++---- openstackclient/image/v2/image.py | 9 ++++++ .../tests/unit/image/v2/test_image.py | 29 +++++++++++++++++++ ...option-to-image-list-ac0651eb2e5d632f.yaml | 4 +++ 5 files changed, 60 insertions(+), 7 deletions(-) create mode 100644 releasenotes/notes/add-community-option-to-image-list-ac0651eb2e5d632f.yaml diff --git a/doc/source/cli/command-objects/image.rst b/doc/source/cli/command-objects/image.rst index a09a8d9ffa..95486e334b 100644 --- a/doc/source/cli/command-objects/image.rst +++ b/doc/source/cli/command-objects/image.rst @@ -205,7 +205,7 @@ List available images .. code:: bash openstack image list - [--public | --private | --shared] + [--public | --private | --community | --shared] [--property ] [--name ] [--status ] @@ -223,6 +223,12 @@ List available images List only private images +.. option:: --community + + List only community images + + *Image version 2 only.* + .. option:: --shared List only shared images diff --git a/openstackclient/api/image_v2.py b/openstackclient/api/image_v2.py index c36281212c..d016318957 100644 --- a/openstackclient/api/image_v2.py +++ b/openstackclient/api/image_v2.py @@ -31,6 +31,7 @@ class APIv2(image_v1.APIv1): detailed=False, public=False, private=False, + community=False, shared=False, **filter ): @@ -44,25 +45,29 @@ class APIv2(image_v1.APIv1): Return public images if True :param private: Return private images if True + :param community: + Return commuity images if True :param shared: Return shared images if True - If public, private and shared are all True or all False then all - images are returned. All arguments False is equivalent to no filter - and all images are returned. All arguments True is a filter that - includes all public, private and shared images which is the same set - as all images. + If public, private, community and shared are all True or all False + then all images are returned. All arguments False is equivalent to no + filter and all images are returned. All arguments True is a filter + that includes all public, private, community and shared images which + is the same set as all images. http://docs.openstack.org/api/openstack-image-service/2.0/content/list-images.html """ - if not public and not private and not shared: + if not public and not private and not community and not shared: # No filtering for all False filter.pop('visibility', None) elif public: filter['visibility'] = 'public' elif private: filter['visibility'] = 'private' + elif community: + filter['visibility'] = 'community' elif shared: filter['visibility'] = 'shared' diff --git a/openstackclient/image/v2/image.py b/openstackclient/image/v2/image.py index 4c7c815f22..51963f7da3 100644 --- a/openstackclient/image/v2/image.py +++ b/openstackclient/image/v2/image.py @@ -439,6 +439,13 @@ class ListImage(command.Lister): default=False, help=_("List only private images"), ) + public_group.add_argument( + "--community", + dest="community", + action="store_true", + default=False, + help=_("List only community images"), + ) public_group.add_argument( "--shared", dest="shared", @@ -516,6 +523,8 @@ class ListImage(command.Lister): kwargs['public'] = True if parsed_args.private: kwargs['private'] = True + if parsed_args.community: + kwargs['community'] = True if parsed_args.shared: kwargs['shared'] = True if parsed_args.limit: diff --git a/openstackclient/tests/unit/image/v2/test_image.py b/openstackclient/tests/unit/image/v2/test_image.py index b769d1f654..3ad4514521 100644 --- a/openstackclient/tests/unit/image/v2/test_image.py +++ b/openstackclient/tests/unit/image/v2/test_image.py @@ -527,6 +527,7 @@ class TestImageList(TestImage): verifylist = [ ('public', False), ('private', False), + ('community', False), ('shared', False), ('long', False), ] @@ -550,6 +551,7 @@ class TestImageList(TestImage): verifylist = [ ('public', True), ('private', False), + ('community', False), ('shared', False), ('long', False), ] @@ -574,6 +576,7 @@ class TestImageList(TestImage): verifylist = [ ('public', False), ('private', True), + ('community', False), ('shared', False), ('long', False), ] @@ -591,6 +594,31 @@ class TestImageList(TestImage): self.assertEqual(self.columns, columns) self.assertEqual(self.datalist, tuple(data)) + def test_image_list_community_option(self): + arglist = [ + '--community', + ] + verifylist = [ + ('public', False), + ('private', False), + ('community', True), + ('shared', False), + ('long', False), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + # In base command class Lister in cliff, abstract method take_action() + # returns a tuple containing the column names and an iterable + # containing the data to be listed. + columns, data = self.cmd.take_action(parsed_args) + self.api_mock.image_list.assert_called_with( + community=True, + marker=self._image.id, + ) + + self.assertEqual(self.columns, columns) + self.assertEqual(self.datalist, tuple(data)) + def test_image_list_shared_option(self): arglist = [ '--shared', @@ -598,6 +626,7 @@ class TestImageList(TestImage): verifylist = [ ('public', False), ('private', False), + ('community', False), ('shared', True), ('long', False), ] diff --git a/releasenotes/notes/add-community-option-to-image-list-ac0651eb2e5d632f.yaml b/releasenotes/notes/add-community-option-to-image-list-ac0651eb2e5d632f.yaml new file mode 100644 index 0000000000..b42dae0c7b --- /dev/null +++ b/releasenotes/notes/add-community-option-to-image-list-ac0651eb2e5d632f.yaml @@ -0,0 +1,4 @@ +--- +fixes: + - Add ``--community`` option to ``image list`` command. + [Bug `2001925 `_]