From 22c60f3ac7a482609ba393a96db3989dca4c280c Mon Sep 17 00:00:00 2001 From: Huanxuan Ao Date: Wed, 1 Jun 2016 09:42:40 +0800 Subject: Add support for removing flavor-access Add "--project" and "--project-domain" options in "flavor unset" command to remove flavor access. Change-Id: Ia5c5a80d9890d5af066b75b4e202647c18c7d915 Partial-Bug: #1575461 --- openstackclient/compute/v2/flavor.py | 52 ++++++++++++++++++++++++++++++++---- 1 file changed, 47 insertions(+), 5 deletions(-) (limited to 'openstackclient/compute/v2') diff --git a/openstackclient/compute/v2/flavor.py b/openstackclient/compute/v2/flavor.py index 48d0e27e..87909a18 100644 --- a/openstackclient/compute/v2/flavor.py +++ b/openstackclient/compute/v2/flavor.py @@ -337,22 +337,64 @@ class UnsetFlavor(command.Command): def get_parser(self, prog_name): parser = super(UnsetFlavor, self).get_parser(prog_name) + parser.add_argument( + "flavor", + metavar="", + help=_("Flavor to modify (name or ID)") + ) parser.add_argument( "--property", metavar="", action='append', - required=True, help=_("Property to remove from flavor " "(repeat option to unset multiple properties)") ) parser.add_argument( - "flavor", - metavar="", - help=_("Flavor to modify (name or ID)") + '--project', + metavar='', + help=_('Remove flavor access from project (name or ID) ' + '(admin only)'), ) + identity_common.add_project_domain_option_to_parser(parser) + return parser def take_action(self, parsed_args): compute_client = self.app.client_manager.compute + identity_client = self.app.client_manager.identity + flavor = _find_flavor(compute_client, parsed_args.flavor) - flavor.unset_keys(parsed_args.property) + + if not parsed_args.property and not parsed_args.project: + raise exceptions.CommandError(_("Nothing specified to be unset.")) + + result = 0 + if parsed_args.property: + try: + flavor.unset_keys(parsed_args.property) + except Exception as e: + self.app.log.error( + _("Failed to unset flavor property: %s") % str(e)) + result += 1 + + if parsed_args.project: + try: + if flavor.is_public: + msg = _("Cannot remove access for a public flavor") + raise exceptions.CommandError(msg) + else: + project_id = identity_common.find_project( + identity_client, + parsed_args.project, + parsed_args.project_domain, + ).id + compute_client.flavor_access.remove_tenant_access( + flavor.id, project_id) + except Exception as e: + self.app.log.error(_("Failed to remove flavor access from" + " project: %s") % str(e)) + result += 1 + + if result > 0: + raise exceptions.CommandError(_("Command Failed: One or more of" + " the operations failed")) -- cgit v1.2.1