From f7feef7f8d1df7b6a28eb6d2e684bf8f1853d356 Mon Sep 17 00:00:00 2001 From: Juan Antonio Osorio Robles Date: Mon, 8 Jun 2015 16:30:06 +0300 Subject: Enable specifying domain for group and role commands Many of the commands for the group and role resources were lacking an option to specify the specific domain groups, projects or users belong to. This commit fixes that. Change-Id: I461d2bcfd01ad2dea970de38ec7ad6f4a631ceb1 Closes-bug: #1446546 --- openstackclient/identity/v3/group.py | 116 +++++++++++++++++++++++++---------- 1 file changed, 83 insertions(+), 33 deletions(-) (limited to 'openstackclient/identity/v3/group.py') diff --git a/openstackclient/identity/v3/group.py b/openstackclient/identity/v3/group.py index 91acf3e5..b064eb77 100644 --- a/openstackclient/identity/v3/group.py +++ b/openstackclient/identity/v3/group.py @@ -46,16 +46,32 @@ class AddUserToGroup(command.Command): metavar='', help='User to add to (name or ID)', ) + parser.add_argument( + '--group-domain', + metavar='', + help=('Domain the group belongs to (name or ID). ' + 'This can be used in case collisions between group names ' + 'exist.') + ) + parser.add_argument( + '--user-domain', + metavar='', + help=('Domain the user belongs to (name or ID). ' + 'This can be used in case collisions between user names ' + 'exist.') + ) return parser def take_action(self, parsed_args): self.log.debug('take_action(%s)', parsed_args) identity_client = self.app.client_manager.identity - user_id = utils.find_resource(identity_client.users, - parsed_args.user).id - group_id = utils.find_resource(identity_client.groups, - parsed_args.group).id + user_id = common.find_user(identity_client, + parsed_args.user, + parsed_args.user_domain).id + group_id = common.find_group(identity_client, + parsed_args.group, + parsed_args.group_domain).id try: identity_client.users.add_to_group(user_id, group_id) @@ -84,16 +100,32 @@ class CheckUserInGroup(command.Command): metavar='', help='User to check (name or ID)', ) + parser.add_argument( + '--group-domain', + metavar='', + help=('Domain the group belongs to (name or ID). ' + 'This can be used in case collisions between group names ' + 'exist.') + ) + parser.add_argument( + '--user-domain', + metavar='', + help=('Domain the user belongs to (name or ID). ' + 'This can be used in case collisions between user names ' + 'exist.') + ) return parser def take_action(self, parsed_args): self.log.debug('take_action(%s)', parsed_args) identity_client = self.app.client_manager.identity - user_id = utils.find_resource(identity_client.users, - parsed_args.user).id - group_id = utils.find_resource(identity_client.groups, - parsed_args.group).id + user_id = common.find_user(identity_client, + parsed_args.user, + parsed_args.user_domain).id + group_id = common.find_group(identity_client, + parsed_args.group, + parsed_args.group_domain).id try: identity_client.users.check_in_group(user_id, group_id) @@ -184,17 +216,10 @@ class DeleteGroup(command.Command): self.log.debug('take_action(%s)', parsed_args) identity_client = self.app.client_manager.identity - domain = None - if parsed_args.domain: - domain = common.find_domain(identity_client, parsed_args.domain) for group in parsed_args.groups: - if domain is not None: - group_obj = utils.find_resource(identity_client.groups, - group, - domain_id=domain.id) - else: - group_obj = utils.find_resource(identity_client.groups, - group) + group_obj = common.find_group(identity_client, + group, + parsed_args.domain) identity_client.groups.delete(group_obj.id) return @@ -216,6 +241,13 @@ class ListGroup(lister.Lister): metavar='', help='Filter group list by (name or ID)', ) + parser.add_argument( + '--user-domain', + metavar='', + help=('Domain the user belongs to (name or ID). ' + 'This can be used in case collisions between user names ' + 'exist.') + ) parser.add_argument( '--long', action='store_true', @@ -234,9 +266,10 @@ class ListGroup(lister.Lister): parsed_args.domain).id if parsed_args.user: - user = utils.find_resource( - identity_client.users, + user = common.find_user( + identity_client, parsed_args.user, + parsed_args.user_domain, ).id else: user = None @@ -277,16 +310,32 @@ class RemoveUserFromGroup(command.Command): metavar='', help='User to remove from (name or ID)', ) + parser.add_argument( + '--group-domain', + metavar='', + help=('Domain the group belongs to (name or ID). ' + 'This can be used in case collisions between group names ' + 'exist.') + ) + parser.add_argument( + '--user-domain', + metavar='', + help=('Domain the user belongs to (name or ID). ' + 'This can be used in case collisions between user names ' + 'exist.') + ) return parser def take_action(self, parsed_args): self.log.debug('take_action(%s)', parsed_args) identity_client = self.app.client_manager.identity - user_id = utils.find_resource(identity_client.users, - parsed_args.user).id - group_id = utils.find_resource(identity_client.groups, - parsed_args.group).id + user_id = common.find_user(identity_client, + parsed_args.user, + parsed_args.user_domain).id + group_id = common.find_group(identity_client, + parsed_args.group, + parsed_args.group_domain).id try: identity_client.users.remove_from_group(user_id, group_id) @@ -309,6 +358,11 @@ class SetGroup(command.Command): 'group', metavar='', help='Group to modify (name or ID)') + parser.add_argument( + '--domain', + metavar='', + help='Domain containing (name or ID)', + ) parser.add_argument( '--name', metavar='', @@ -322,7 +376,8 @@ class SetGroup(command.Command): def take_action(self, parsed_args): self.log.debug('take_action(%s)', parsed_args) identity_client = self.app.client_manager.identity - group = utils.find_resource(identity_client.groups, parsed_args.group) + group = common.find_group(identity_client, parsed_args.group, + parsed_args.domain) kwargs = {} if parsed_args.name: kwargs['name'] = parsed_args.name @@ -359,14 +414,9 @@ class ShowGroup(show.ShowOne): self.log.debug('take_action(%s)', parsed_args) identity_client = self.app.client_manager.identity - if parsed_args.domain: - domain = common.find_domain(identity_client, parsed_args.domain) - group = utils.find_resource(identity_client.groups, - parsed_args.group, - domain_id=domain.id) - else: - group = utils.find_resource(identity_client.groups, - parsed_args.group) + group = common.find_group(identity_client, + parsed_args.group, + domain_name_or_id=parsed_args.domain) group._info.pop('links') return zip(*sorted(six.iteritems(group._info))) -- cgit v1.2.1