diff options
| author | Steve Martinelli <stevemar@ca.ibm.com> | 2013-04-18 17:49:42 -0500 |
|---|---|---|
| committer | Dean Troyer <dtroyer@gmail.com> | 2013-07-03 11:51:23 -0500 |
| commit | f29a849ffcc203e7038fd2a026e0f755dcf2c1fc (patch) | |
| tree | 75ff2e2a5d529d7b81236bbf1100393a0e173f5a /openstackclient/identity/v3/group.py | |
| parent | d50b5750640ace3a77e6e0637d6cd24f91db8080 (diff) | |
| download | python-openstackclient-f29a849ffcc203e7038fd2a026e0f755dcf2c1fc.tar.gz | |
Finish up v3 role commands
* Add remove role
* Add --role to group list
* Add --role to user list
* Fix groups in AddRole()
* Remove the tweaks to utils.find_resource for domains; will address
that across domains, projects, users and groups in another patch.
I want to nail down the structure of these commands and get that into place
Change-Id: I8673dd8221ef88978dada5a2833c187026bdb31a
Diffstat (limited to 'openstackclient/identity/v3/group.py')
| -rw-r--r-- | openstackclient/identity/v3/group.py | 95 |
1 files changed, 88 insertions, 7 deletions
diff --git a/openstackclient/identity/v3/group.py b/openstackclient/identity/v3/group.py index 0562b766..3e7368f1 100644 --- a/openstackclient/identity/v3/group.py +++ b/openstackclient/identity/v3/group.py @@ -89,7 +89,7 @@ class DeleteGroup(command.Command): class ListGroup(lister.Lister): - """List group command""" + """List groups and optionally roles assigned to groups""" api = 'identity' log = logging.getLogger(__name__ + '.ListGroup') @@ -97,19 +97,100 @@ class ListGroup(lister.Lister): def get_parser(self, prog_name): parser = super(ListGroup, self).get_parser(prog_name) parser.add_argument( + 'group', + metavar='<group>', + nargs='?', + help='Name or ID of group to list [required with --role]', + ) + parser.add_argument( + '--role', + action='store_true', + default=False, + help='List the roles assigned to <group>', + ) + domain_or_project = parser.add_mutually_exclusive_group() + domain_or_project.add_argument( + '--domain', + metavar='<domain>', + help='Filter list by <domain> [Only valid with --role]', + ) + domain_or_project.add_argument( + '--project', + metavar='<project>', + help='Filter list by <project> [Only valid with --role]', + ) + parser.add_argument( '--long', action='store_true', default=False, - help='Additional fields are listed in output') + help='Additional fields are listed in output', + ) return parser def take_action(self, parsed_args): self.log.debug('take_action(%s)' % parsed_args) - if parsed_args.long: - columns = ('ID', 'Name', 'Domain ID', 'Description') + identity_client = self.app.client_manager.identity + + if parsed_args.role: + # List roles belonging to group + + # Group is required here, bail if it is not supplied + if not parsed_args.group: + sys.stderr.write('Error: Group must be specified') + # TODO(dtroyer): This lists the commands...I want it to + # show the help for _this_ command. + self.app.DeferredHelpAction( + self.app.parser, + self.app.parser, + None, + None, + ) + return ([], []) + + group = utils.find_resource( + identity_client.groups, + parsed_args.group, + ) + + if parsed_args.domain: + columns = ('ID', 'Name', 'Domain', 'Group') + domain = utils.find_resource( + identity_client.domains, + parsed_args.domain, + ) + data = identity_client.roles.list( + group=group, + domain=domain, + ) + for group_role in data: + group_role.group = group.name + group_role.domain = domain.name + elif parsed_args.project: + columns = ('ID', 'Name', 'Project', 'Group') + project = utils.find_resource( + identity_client.projects, + parsed_args.project, + ) + data = identity_client.roles.list( + group=group, + project=project, + ) + for group_role in data: + group_role.group = group.name + group_role.project = project.name + else: + # TODO(dtroyer): raise exception here, this really is an error + sys.stderr.write("Error: Must specify --domain or --project " + "with --role\n") + return ([], []) else: - columns = ('ID', 'Name') - data = self.app.client_manager.identity.groups.list() + # List groups + if parsed_args.long: + columns = ('ID', 'Name', 'Domain ID', 'Description') + else: + columns = ('ID', 'Name') + data = identity_client.groups.list() + return (columns, (utils.get_item_properties( s, columns, @@ -158,7 +239,7 @@ class SetGroup(command.Command): kwargs['domain'] = domain if not len(kwargs): - sys.stdout.write("Group not updated, no arguments present") + sys.stderr.write("Group not updated, no arguments present") return identity_client.groups.update(group.id, **kwargs) return |
