summaryrefslogtreecommitdiff
path: root/openstackclient/identity
diff options
context:
space:
mode:
authorJude Job <judeopenstack@gmail.com>2015-12-16 14:38:15 +0530
committerSteve Martinelli <stevemar@ca.ibm.com>2016-01-04 10:25:55 -0500
commita2a63f19bf1d21c437f1b980aa209277fc947a89 (patch)
treed718a9bc01ccf2655d662ab7e1f69066957795b4 /openstackclient/identity
parentc47aa52c431e33f876617e648295022b95b64676 (diff)
downloadpython-openstackclient-a2a63f19bf1d21c437f1b980aa209277fc947a89.tar.gz
Implementation for project unset cmd for python-openstackclient.
This patch introduces a unit test class TestProjectUnset for testing unset cmd. Co-Authored-By: Steve Martinelli <stevemar@ca.ibm.com> Change-Id: Ib4a414d2313e3d37e48d1cb3639f064231aec508 Closes-Bug: #1486597
Diffstat (limited to 'openstackclient/identity')
-rw-r--r--openstackclient/identity/v2_0/project.py56
1 files changed, 56 insertions, 0 deletions
diff --git a/openstackclient/identity/v2_0/project.py b/openstackclient/identity/v2_0/project.py
index 065f0adf..4330c79c 100644
--- a/openstackclient/identity/v2_0/project.py
+++ b/openstackclient/identity/v2_0/project.py
@@ -282,4 +282,60 @@ class ShowProject(show.ShowOne):
# TODO(stevemar): Remove the line below when we support multitenancy
info.pop('parent_id', None)
+
+ # NOTE(stevemar): Property handling isn't really supported in Keystone
+ # and needs a lot of extra handling. Let's reserve the properties that
+ # the API has and handle the extra top level properties.
+ reserved = ('name', 'id', 'enabled', 'description')
+ properties = {}
+ for k, v in info.items():
+ if k not in reserved:
+ # If a key is not in `reserved` it's a property, pop it
+ info.pop(k)
+ # If a property has been "unset" it's `None`, so don't show it
+ if v is not None:
+ properties[k] = v
+
+ info['properties'] = utils.format_dict(properties)
return zip(*sorted(six.iteritems(info)))
+
+
+class UnsetProject(command.Command):
+ """Unset project properties"""
+
+ log = logging.getLogger(__name__ + '.UnsetProject')
+
+ def get_parser(self, prog_name):
+ parser = super(UnsetProject, self).get_parser(prog_name)
+ parser.add_argument(
+ 'project',
+ metavar='<project>',
+ help=_('Project to modify (name or ID)'),
+ )
+ parser.add_argument(
+ '--property',
+ metavar='<key>',
+ action='append',
+ default=[],
+ help=_('Unset a project property '
+ '(repeat option to unset multiple properties)'),
+ required=True,
+ )
+ return parser
+
+ @utils.log_method(log)
+ def take_action(self, parsed_args):
+ identity_client = self.app.client_manager.identity
+ project = utils.find_resource(
+ identity_client.tenants,
+ parsed_args.project,
+ )
+ if not parsed_args.property:
+ self.app.log.error("No changes requested\n")
+ else:
+ kwargs = project._info
+ for key in parsed_args.property:
+ if key in kwargs:
+ kwargs[key] = None
+ identity_client.tenants.update(project.id, **kwargs)
+ return