From c2e0e1f388988dfb53738be1b91d80b1d6b24798 Mon Sep 17 00:00:00 2001
From: atlurie <atlurie@uab.edu>
Date: Tue, 14 Jun 2022 02:20:13 -0500
Subject: [PATCH] Add functionality to support both addition & removal from
 groups.

User would be removed from one or more groups according to the
list provided in msg, before they are added to one or more groups.
---
 prod_rmq_agents/group_member.py | 32 ++++++++++++++++++++------------
 1 file changed, 20 insertions(+), 12 deletions(-)

diff --git a/prod_rmq_agents/group_member.py b/prod_rmq_agents/group_member.py
index 1f621a0..3eee98b 100644
--- a/prod_rmq_agents/group_member.py
+++ b/prod_rmq_agents/group_member.py
@@ -26,26 +26,34 @@ def group_member(ch, method, properties, body):
     state = msg["state"]
 
     try:
+        if 'remove' in msg["groups"]:
+            for each_group in msg["groups"]["remove"]:
+                logger.debug(f'Removing user {username} from group {each_group}')
+                if str(rcfg.bright_cm_version).split(".")[0] == "8":
+                    grp_remove_user_cmd = f'/cm/local/apps/cmd/bin/cmsh -n -c "group; removefrom {each_group} groupmembers {username}; commit;"'
+                else:
+                    grp_remove_user_cmd = f'/cm/local/apps/cmd/bin/cmsh -n -c "group; removefrom {each_group} members {username}; commit;"'
+
+                proc = Popen(shlex.split(grp_remove_user_cmd), stdout=PIPE, stderr=PIPE)
+                out,err = proc.communicate()
+                logger.info(f'Running command: {grp_remove_user_cmd}')
+                logger.debug(f'Result: {err}')
+                logger.info(f'User {username} is removed from {each_group} group')
 
-        if action == 'add':
-            for each_group in msg["groupnames"]:
+        if 'add' in msg["groups"]:
+            for each_group in msg["groups"]["add"]:
                 logger.debug(f'Adding user {username} to group {each_group}')
-                grp_add_user_cmd = f'/cm/local/apps/cmd/bin/cmsh -n -c "group; append {each_group} members {username}; commit;"'
+                if str(rcfg.bright_cm_version).split(".")[0] == "8":
+                    grp_add_user_cmd = f'/cm/local/apps/cmd/bin/cmsh -n -c "group; append {each_group} groupmembers {username}; commit;"'
+                else:
+                    grp_add_user_cmd = f'/cm/local/apps/cmd/bin/cmsh -n -c "group; append {each_group} members {username}; commit;"'
+
                 proc = Popen(shlex.split(grp_add_user_cmd), stdout=PIPE, stderr=PIPE)
                 logger.info(f'Running command: {grp_add_user_cmd}')
                 out,err = proc.communicate()
                 logger.debug(f'Result: {err}')
                 logger.info(f'User {username} is added to {each_group} group')
 
-        elif action == 'remove':
-            for each_group in msg["groupnames"]:
-                logger.debug(f'Removing user {username} from group {each_group}')
-                grp_remove_user_cmd = f'/cm/local/apps/cmd/bin/cmsh -n -c "group; removefrom {each_group} members {username}; commit;"'
-                proc = Popen(shlex.split(grp_remove_user_cmd), stdout=PIPE, stderr=PIPE)
-                out,err = proc.communicate()
-                logger.info(f'Running command: {grp_remove_user_cmd}')
-                logger.debug(f'Result: {err}')
-                logger.info(f'User {username} is removed from {each_group} group')
 
         msg["success"] = True
 
-- 
GitLab