Skip to content
Snippets Groups Projects

Agent that adds a user to a group list

1 file
+ 98
0
Compare changes
  • Side-by-side
  • Inline
+ 98
0
 
#!/usr/bin/env python
 
import os
 
import json
 
import pika
 
import shlex
 
import rc_util
 
from subprocess import Popen,PIPE
 
from pathlib import Path
 
from rc_rmq import RCRMQ
 
import rabbit_config as rcfg
 
 
task = "group_member"
 
 
args = rc_util.get_args()
 
logger = rc_util.get_logger(args)
 
 
# Instantiate rabbitmq object
 
rc_rmq = RCRMQ({"exchange": rcfg.Exchange, "exchange_type": "topic"})
 
 
 
def group_member(ch, method, properties, body):
 
msg = json.loads(body)
 
username = msg["username"]
 
action = msg["action"]
 
msg["task"] = task
 
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;"'
 
 
logger.info(f'Running command: {grp_remove_user_cmd}')
 
proc = Popen(shlex.split(grp_remove_user_cmd), stdout=PIPE, stderr=PIPE)
 
out,err = proc.communicate()
 
logger.debug(f'Result: {err}')
 
logger.info(f'User {username} is removed from {each_group} group')
 
 
if 'add' in msg["groups"]:
 
for each_group in msg["groups"]["add"]:
 
logger.debug(f'Adding user {username} to group {each_group}')
 
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;"'
 
 
logger.info(f'Running command: {grp_add_user_cmd}')
 
proc = Popen(shlex.split(grp_add_user_cmd), stdout=PIPE, stderr=PIPE)
 
out,err = proc.communicate()
 
logger.debug(f'Result: {err}')
 
logger.info(f'User {username} is added to {each_group} group')
 
 
 
msg["success"] = True
 
 
except Exception:
 
msg["success"] = False
 
msg["errmsg"] = "Exception raised, while adding user to group {groupname}, check the logs for stack trace"
 
logger.error("", exc_info=True)
 
 
 
corr_id = properties.correlation_id
 
reply_to = properties.reply_to
 
 
logger.debug(f'corr_id: {corr_id} \n reply_to: {reply_to}')
 
# send response to the callback queue
 
if reply_to:
 
props = pika.BasicProperties(correlation_id=corr_id)
 
logger.debug("Sending confirmation back to reply_to")
 
rc_rmq.publish_msg(
 
{
 
"routing_key": reply_to,
 
"props": props,
 
"msg": msg
 
}
 
)
 
else:
 
print("Error: no reply_to")
 
 
logger.debug(f'User {username} confirmation sent from {task}')
 
 
ch.basic_ack(delivery_tag=method.delivery_tag)
 
 
 
logger.info(f"Start listening to queue: {task}")
 
rc_rmq.bind_queue(queue=task, routing_key='group_member.*', durable=True)
 
 
rc_rmq.start_consume(
 
{"queue": task, "cb": group_member}
 
)
 
 
logger.info("Disconnected")
 
rc_rmq.disconnect()
 
Loading