From 9dbf46b8370becd1100837ee1868c7532e632b81 Mon Sep 17 00:00:00 2001
From: Steve Martinelli <stevemar@ca.ibm.com>
Date: Mon, 10 Jun 2013 09:19:54 -0500
Subject: [PATCH] Add methods for user and group interactions

* Add user to group
* Contains user in group
* Remove user from group

Change-Id: If5219fa9d4761d7b97950c39556b3e1b8aab6517
---
 openstackclient/identity/v3/group.py | 117 +++++++++++++++++++++++++++
 setup.cfg                            |   3 +
 2 files changed, 120 insertions(+)

diff --git a/openstackclient/identity/v3/group.py b/openstackclient/identity/v3/group.py
index 0562b76630..de4fe2d276 100644
--- a/openstackclient/identity/v3/group.py
+++ b/openstackclient/identity/v3/group.py
@@ -25,6 +25,84 @@ from cliff import show
 from openstackclient.common import utils
 
 
+class AddUserToGroup(command.Command):
+    """Add user to group"""
+
+    api = 'identity'
+    log = logging.getLogger(__name__ + '.AddUserToGroup')
+
+    def get_parser(self, prog_name):
+        parser = super(AddUserToGroup, self).get_parser(prog_name)
+        parser.add_argument(
+            'group',
+            metavar='<group>',
+            help='Group name or ID that user will be added to',
+        )
+        parser.add_argument(
+            'user',
+            metavar='<user>',
+            help='User name or ID to add to group',
+        )
+        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
+
+        try:
+            identity_client.users.add_to_group(user_id, group_id)
+        except Exception:
+            sys.stderr.write("%s not added to group %s\n" %
+                             (parsed_args.user, parsed_args.group))
+        else:
+            sys.stdout.write("%s added to group %s\n" %
+                             (parsed_args.user, parsed_args.group))
+
+
+class CheckUserInGroup(command.Command):
+    """Checks that user is in a specific group"""
+
+    api = 'identity'
+    log = logging.getLogger(__name__ + '.CheckUserInGroup')
+
+    def get_parser(self, prog_name):
+        parser = super(CheckUserInGroup, self).get_parser(prog_name)
+        parser.add_argument(
+            'group',
+            metavar='<group>',
+            help='Group name or ID that user will be added to',
+        )
+        parser.add_argument(
+            'user',
+            metavar='<user>',
+            help='User name or ID to add to group',
+        )
+        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
+
+        try:
+            identity_client.users.check_in_group(user_id, group_id)
+        except Exception:
+            sys.stderr.write("%s not in group %s\n" %
+                             (parsed_args.user, parsed_args.group))
+        else:
+            sys.stdout.write("%s in group %s\n" %
+                             (parsed_args.user, parsed_args.group))
+
+
 class CreateGroup(show.ShowOne):
     """Create group command"""
 
@@ -117,6 +195,45 @@ class ListGroup(lister.Lister):
                 ) for s in data))
 
 
+class RemoveUserFromGroup(command.Command):
+    """Remove user to group"""
+
+    api = 'identity'
+    log = logging.getLogger(__name__ + '.RemoveUserFromGroup')
+
+    def get_parser(self, prog_name):
+        parser = super(RemoveUserFromGroup, self).get_parser(prog_name)
+        parser.add_argument(
+            'group',
+            metavar='<group>',
+            help='Group name or ID that user will be removed from',
+        )
+        parser.add_argument(
+            'user',
+            metavar='<user>',
+            help='User name or ID to remove from group',
+        )
+        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
+
+        try:
+            identity_client.users.remove_from_group(user_id, group_id)
+        except Exception:
+            sys.stderr.write("%s not removed from group %s\n" %
+                             (parsed_args.user, parsed_args.group))
+        else:
+            sys.stdout.write("%s removed from group %s\n" %
+                             (parsed_args.user, parsed_args.group))
+
+
 class SetGroup(command.Command):
     """Set group command"""
 
diff --git a/setup.cfg b/setup.cfg
index 4b2142dd2c..a70306ea0c 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -90,9 +90,12 @@ openstack.identity.v3 =
     endpoint_show = openstackclient.identity.v3.endpoint:ShowEndpoint
     endpoint_list = openstackclient.identity.v3.endpoint:ListEndpoint
 
+    group_add_user = openstackclient.identity.v3.group:AddUserToGroup
+    group_contains_user = openstackclient.identity.v3.group:CheckUserInGroup
     group_create = openstackclient.identity.v3.group:CreateGroup
     group_delete = openstackclient.identity.v3.group:DeleteGroup
     group_list = openstackclient.identity.v3.group:ListGroup
+    group_remove_user = openstackclient.identity.v3.group:RemoveUserFromGroup
     group_set = openstackclient.identity.v3.group:SetGroup
     group_show = openstackclient.identity.v3.group:ShowGroup