diff --git a/git_commit.py b/git_commit.py new file mode 100644 index 0000000000000000000000000000000000000000..3ea965d288dd5c240e0c72d58b00921c91344777 --- /dev/null +++ b/git_commit.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python +import os +import sh +import sys +import json +import rc_util +from rc_rmq import RCRMQ + +task = 'git_commit' + +# Instantiate rabbitmq object +rc_rmq = RCRMQ({'exchange': 'RegUsr', 'exchange_type': 'topic'}) + +# Define some location +repo_location = os.path.expanduser('~/git/rc-users') +users_dir = repo_location + '/users' +groups_dir = repo_location + '/groups' + +args = rc_util.get_args() +logger = rc_util.get_logger(args) + +if not args.dry_run: + git = sh.git.bake('-C', repo_location) + ldapsearch = sh.Command('ldapsearch') +else: + git = sh.echo.bake('git', '-C', repo_location) + ldapsearch = sh.echo.bake('ldapsearch') + +def git_commit(ch, method, properties, body): + msg = json.loads(body) + username = msg['username'] + ticketnum = msg.get('ticketnum', 'add-users-' + username.lower()) + msg['task'] = task + msg['success'] = False + branch_name = 'issue-' + ticketnum + user_ldif = users_dir + f'/{username}.ldif' + group_ldif = groups_dir + f'/{username}.ldif' + + logger.info("Received: %s", msg) + logger.debug("ticketnum: %s", ticketnum) + logger.debug("branch_name: %s", branch_name) + + try: + + logger.debug('git checkout master') + git.checkout('master') + logger.debug('git pull') + git.pull() + logger.debug('git checkout -b %s', branch_name) + git.checkout('-b', branch_name) + + logger.debug("open(%s, 'w'), open(%s, 'w')", user_ldif, group_ldif) + with open(user_ldif, 'w') as ldif_u,\ + open(group_ldif, 'w') as ldif_g: + logger.debug(f"ldapsearch -LLL -x -h ldapserver -b 'dc=cm,dc=cluster' uid={username} > {user_ldif}") + ldapsearch('-LLL', '-x', '-h', 'ldapserver', '-b', "dc=cm,dc=cluster", f"uid={username}", _out=ldif_u) + logger.debug(f"ldapsearch -LLL -x -h ldapserver -b 'ou=Group,dc=cm,dc=cluster' cn={username} > {group_ldif}") + ldapsearch('-LLL', '-x', '-h', 'ldapserver', '-b', "ou=Group,dc=cm,dc=cluster", f"cn={username}", _out=ldif_g) + logger.info('user ldif files generated.') + + logger.debug('git add %s', user_ldif) + git.add(user_ldif) + logger.debug('git add %s', group_ldif) + git.add(group_ldif) + logger.debug("git commit -m 'Added new cheaha user: %s'", username) + git.commit(m="Added new cheaha user: " + username) + logger.debug('git checkout master') + git.checkout('master') + + logger.debug('git merge %s --no-ff --no-edit', branch_name) + git.merge(branch_name, '--no-ff', '--no-edit') + logger.debug('git push origin master') + git.push('origin', 'master') + # merge with gitlab api + + logger.info('Added ldif files and committed to git repo') + + msg['success'] = True + except Exception as exception: + logger.error('', exc_info=True) + + # Send confirm message + logger.debug('rc_rmq.publish_msge()') + rc_rmq.publish_msg({ + 'routing_key': 'confirm.' + username, + 'msg': msg + }) + logger.info('confirmation sent') + + # Acknowledge message + logger.debug('ch.basic_ack()') + ch.basic_ack(delivery_tag=method.delivery_tag) + + +logger.info("Start listening to queue: %s", task) +rc_rmq.start_consume({ + 'queue': task, + 'routing_key': "verify.*", + 'cb': git_commit +}) + +logger.info("Disconnected") +rc_rmq.disconnect() diff --git a/requirements.txt b/requirements.txt index becc2ce1d48131ef086f528906361c6b94cd5487..6d35ddfcd9d728e552c87e4efc45f130639a7070 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1,2 @@ pika==1.1.0 +sh==1.12.14