From 7bb459837bf8023cbc71cbf41007f8aa4c4725fb Mon Sep 17 00:00:00 2001 From: chengkunye Date: Thu, 16 Jul 2015 17:32:42 +0800 Subject: add image member commands for image API This commit adds the following commands: image project add image project remove Closes-Bug: 1402420 Change-Id: I07954e9fa43a3ad6078dd939ecedf9f038299e7b --- openstackclient/image/v2/image.py | 80 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) (limited to 'openstackclient/image') diff --git a/openstackclient/image/v2/image.py b/openstackclient/image/v2/image.py index 3dd98338..30485202 100644 --- a/openstackclient/image/v2/image.py +++ b/openstackclient/image/v2/image.py @@ -27,6 +27,49 @@ from glanceclient.common import utils as gc_utils from openstackclient.api import utils as api_utils from openstackclient.common import parseractions from openstackclient.common import utils +from openstackclient.identity import common + + +class AddProjectToImage(show.ShowOne): + """Associate project with image""" + + log = logging.getLogger(__name__ + ".AddProjectToImage") + + def get_parser(self, prog_name): + parser = super(AddProjectToImage, self).get_parser(prog_name) + parser.add_argument( + "image", + metavar="", + help="Image to share (name or ID)", + ) + parser.add_argument( + "project", + metavar="", + help="Project to associate with image (name or ID)", + ) + common.add_project_domain_option_to_parser(parser) + return parser + + def take_action(self, parsed_args): + self.log.debug("take_action(%s)", parsed_args) + + image_client = self.app.client_manager.image + identity_client = self.app.client_manager.identity + + project_id = common.find_project(identity_client, + parsed_args.project, + parsed_args.project_domain).id + + image_id = utils.find_resource( + image_client.images, + parsed_args.image).id + + image_member = image_client.image_members.create( + image_id, + project_id, + ) + + return zip(*sorted(six.iteritems(image_member._info))) class DeleteImage(command.Command): @@ -192,6 +235,43 @@ class ListImage(lister.Lister): ) +class RemoveProjectImage(command.Command): + """Disassociate project with image""" + + log = logging.getLogger(__name__ + ".RemoveProjectImage") + + def get_parser(self, prog_name): + parser = super(RemoveProjectImage, self).get_parser(prog_name) + parser.add_argument( + "image", + metavar="", + help="Image to unshare (name or ID)", + ) + parser.add_argument( + "project", + metavar="", + help="Project to disassociate with image (name or ID)", + ) + common.add_project_domain_option_to_parser(parser) + return parser + + def take_action(self, parsed_args): + self.log.debug("take_action(%s)", parsed_args) + + image_client = self.app.client_manager.image + identity_client = self.app.client_manager.identity + + project_id = common.find_project(identity_client, + parsed_args.project, + parsed_args.project_domain).id + + image_id = utils.find_resource( + image_client.images, + parsed_args.image).id + + image_client.image_members.delete(image_id, project_id) + + class SaveImage(command.Command): """Save an image locally""" -- cgit v1.2.1