summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
authorMohammed Naser <mnaser@vexxhost.com>2018-03-20 11:31:50 -0400
committerMohammed Naser <mnaser@vexxhost.com>2018-03-21 08:56:08 -0400
commit79577681d88e4851d4d32482e80d43ed9aa0f521 (patch)
treec10c486b140724b83b69417cbcf535d15a5f9b8f /openstackclient
parent6361e5e121d6ea058aa1c5c20ec897929b7a9c05 (diff)
downloadpython-openstackclient-79577681d88e4851d4d32482e80d43ed9aa0f521.tar.gz
Add support to list image members
The OpenStack client presently has support to add or remove members from an image, but no way to list image members. This patch addreses this issue. Change-Id: Ie85c5de23c6beb21fd6b4c04c83ddf2a116606ef
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/image/v2/image.py33
-rw-r--r--openstackclient/tests/unit/image/v2/test_image.py46
2 files changed, 79 insertions, 0 deletions
diff --git a/openstackclient/image/v2/image.py b/openstackclient/image/v2/image.py
index 7e6a7aa1..9407e665 100644
--- a/openstackclient/image/v2/image.py
+++ b/openstackclient/image/v2/image.py
@@ -592,6 +592,39 @@ class ListImage(command.Lister):
)
+class ListImageProjects(command.Lister):
+ _description = _("List projects associated with image")
+
+ def get_parser(self, prog_name):
+ parser = super(ListImageProjects, self).get_parser(prog_name)
+ parser.add_argument(
+ "image",
+ metavar="<image>",
+ help=_("Image (name or ID)"),
+ )
+ common.add_project_domain_option_to_parser(parser)
+ return parser
+
+ def take_action(self, parsed_args):
+ image_client = self.app.client_manager.image
+ columns = (
+ "Image ID",
+ "Member ID",
+ "Status"
+ )
+
+ image_id = utils.find_resource(
+ image_client.images,
+ parsed_args.image).id
+
+ data = image_client.image_members.list(image_id)
+
+ return (columns,
+ (utils.get_item_properties(
+ s, columns,
+ ) for s in data))
+
+
class RemoveProjectImage(command.Command):
_description = _("Disassociate project with image")
diff --git a/openstackclient/tests/unit/image/v2/test_image.py b/openstackclient/tests/unit/image/v2/test_image.py
index e1a79d13..301cd037 100644
--- a/openstackclient/tests/unit/image/v2/test_image.py
+++ b/openstackclient/tests/unit/image/v2/test_image.py
@@ -780,6 +780,52 @@ class TestImageList(TestImage):
)
+class TestListImageProjects(TestImage):
+
+ project = identity_fakes.FakeProject.create_one_project()
+ _image = image_fakes.FakeImage.create_one_image()
+ member = image_fakes.FakeImage.create_one_image_member(
+ attrs={'image_id': _image.id,
+ 'member_id': project.id}
+ )
+
+ columns = (
+ "Image ID",
+ "Member ID",
+ "Status"
+ )
+
+ datalist = ((
+ _image.id,
+ member.member_id,
+ member.status,
+ ))
+
+ def setUp(self):
+ super(TestListImageProjects, self).setUp()
+
+ self.images_mock.get.return_value = self._image
+ self.image_members_mock.list.return_value = self.datalist
+
+ self.cmd = image.ListImageProjects(self.app, None)
+
+ def test_image_member_list(self):
+ arglist = [
+ self._image.id
+ ]
+ verifylist = [
+ ('image', self._image.id)
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+
+ self.image_members_mock.list.assert_called_with(self._image.id)
+
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(len(self.datalist), len(tuple(data)))
+
+
class TestRemoveProjectImage(TestImage):
project = identity_fakes.FakeProject.create_one_project()