diff --git a/doc/source/cli/command-objects/image.rst b/doc/source/cli/command-objects/image.rst index a09a8d9ff..95486e334 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 c36281212..d01631895 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 4c7c815f2..51963f7da 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 b769d1f65..3ad451452 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 000000000..b42dae0c7 --- /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 `_]