From d661e21212ab799bf7f552c30620d93e92f8d8bd Mon Sep 17 00:00:00 2001 From: fandrem <none@none> Date: Tue, 3 May 2022 15:40:32 +0200 Subject: [PATCH] Feature #28491 - sid_user.py script --- bin/sid_user.py | 114 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 99 insertions(+), 15 deletions(-) diff --git a/bin/sid_user.py b/bin/sid_user.py index 3656001..6e8412a 100755 --- a/bin/sid_user.py +++ b/bin/sid_user.py @@ -373,13 +373,71 @@ def sid_update_user_exlude_approver_scheduler_change_management(diego, dfqdn, re ''' delete: need to check the line exist if not 409''' scrat_inst = Scrat(res_rw_user, '', fqdn=dfqdn, version=2, verify=verify) - print(dfqdn) (scratres) = scrat_inst.deleteLine(block_to_update) if str(scratres) != '200': print("not removed " + user + " from " + typeExclude) else: print("removed " + user + " from " + typeExclude) +def sid_create_update_user_approver_scheduler_change_management(diego, dfqdn, res_rw_user, user, uid, typeAdd, need_to_update, context_uid=778000000, verify=True): + create = True + results = diego.diegoGetObject(uid) + print(need_to_update) + print(results['objects']) + ty = [] + ty2 = [] + if 'objects' in results : + for typ in results['objects'] : + ty.append(typ['type']) + if typ['type'] == typeAdd and need_to_update : + create = False + ty2 = ty + ty2.append(typeAdd) + #print(ty2) + #exit(1) + #logger.debug(results) + + block_to_update = { + 'name': user, + 'context': context_uid, + 'type': typeAdd, + 'properties': { + 'is a' : typeAdd + } + } + + block_to_update = { + 'uid': uid, + 'name': user, + 'context': context_uid, + 'type': typeAdd, + 'properties': { + "is a" : [{'type': 'user', 'context': 666000002}, {'type': 'approver', 'context': 778000000}, {'type' : typeAdd, 'context': 778000000}], + } + } + + to_print = pformat(block_to_update) + for i in list(range(0, int(round(len(to_print) / 250)) + 1)): + logger.info('scrat %s update cmd: %s' % (str(i), to_print[250 * i:250 * (i + 1)])) + + ''' delete: need to check the line exist if not 409''' + scrat_inst = Scrat(res_rw_user, '', fqdn=dfqdn, version=2, verify=verify) + (scrat_json, scratres) = scrat_inst.scratUpdate(block_to_update, overwrite_mode=True, line_only=True, Full=True) + #(scratres) = scrat_inst.scratQuery(block_to_update, 'creation') + if str(scratres) != '200': + to_print = pformat(block_to_update) + for i in list(range(0, int(round(len(to_print) / 250)) + 1)): + logger.error('scrat %s creating cmd: %s' % (str(i), to_print[250 * i:250 * (i + 1)])) + for i in list(range(0, int(round(len(to_print) / 250)) + 1)): + logger.error('scrat %s creating failed: %s' % (str(i), to_print[250 * i:250 * (i + 1)])) + # print('scrat %s update failed: %s' % (str(i), to_print[250 * i:250 * (i + 1)])) + else: + to_print = pformat(block_to_update) + for i in list(range(0, int(round(len(to_print) / 250)) + 1)): + logger.debug('scrat %s creating cmd: %s' % (str(i), to_print[250 * i:250 * (i + 1)])) + + print("STOP!") + exit(1) def main(): @@ -440,7 +498,7 @@ def main(): departments = ['DIGIT.C.4', 'DIGIT.C.4.002', 'DIGIT.C.4.003', 'DIGIT.C.4.006', 'DIGIT.C.4.007', 'DIGIT.C.4.008'] - # last reminder request: 04/2022 + # last reminder request: 04/2022 : used to remove the relations for others users approver_scheduler_list = ['fournla', 'chevaju', 'gondago'] snet_results = dict() snet_results = snet_ldap_get() @@ -716,11 +774,7 @@ def main(): if 'Visual' not in block_to_update['properties']['has access to application program']: block_to_update['properties']['has access to application program'].append('Visual') - - # print("#TODO This '%s' is a PM -> also need to add a 'is a' 'approver' + 'scheduler'" % user) - # sid_need_approver.append(user) - # sid_need_scheduler.append(user) - + elif mb == 'sd': if need_to_update is False and need_to_create is True: block_to_update['properties']['belongs to'].append('Snet NOC/SD') @@ -780,6 +834,20 @@ def main(): if len(block_to_update['properties']['has access to application program']) == 1: block_to_update['properties']['has access to application program'] = block_to_update['properties']['has access to application program'][0] + # has as role (OQM, Product Owner, SDM) + # print("This '%s' is a PM -> also need to add a 'is a' 'approver' + 'scheduler'" % user) + if user in sid_results[1] and 'has as role' in sid_results[1][user] : + if isinstance(sid_results[1][user]['has as role'], list): + for role in sid_results[1][user]['has as role']: + if role == 'OQM' or role == 'Product Owner' or role == 'SDM' : + sid_need_approver.append(user) + sid_need_scheduler.append(user) + else : + role = sid_results[1][user]['has as role'] + if role == 'OQM' or role == 'Product Owner' or role == 'SDM' : + sid_need_approver.append(user) + sid_need_scheduler.append(user) + # check and cleanup the data before scrat dict_keys = list(block_to_update['properties'].keys()) for prop in dict_keys: @@ -809,8 +877,6 @@ def main(): for i in list(range(0, int(round(len(to_print) / 250)) + 1)): logger.info('scrat %s cmd: %s' % (str(i), to_print[250 * i:250 * (i + 1)])) - # TODO If this is a Board Coordinator -> also need to add a 'is a' 'approver' + 'scheduler' - params = {} sid_s_results = diego.diego_run_dieget_by_name('sid_sheduler_check', params) for user in sid_s_results[1]: @@ -819,12 +885,14 @@ def main(): if user not in sid_need_scheduler or user not in approver_scheduler_list: logger.error('SID user ' + user + ' should not be an scheduler.') if not dryrun: - sid_update_user_exlude_approver_scheduler_change_management(diego, fqdn, res_rw_user, user, sid_s_results[1][user]['uid'], 'scheduler') + sid_update_user_exlude_approver_scheduler_change_management(diego, fqdn, res_rw_user, user, sid_results[1][user]['uid'], 'scheduler') #pass else: logger.error('dry run, user not removed from the scheduler role.') + #check_if_is_approver_sheduler_add_relation_if_not_exists(diego, fqdn, res_rw_user, user, sid_s_results[1][user]['uid'], 'scheduler') continue - + + print(sid_need_scheduler, "SCHESDULER-LIST") for user in sid_need_scheduler: if user in devnull_user: continue @@ -836,7 +904,16 @@ def main(): elif user not in sid_s_results[1]: need_to_create = True logger.debug('SID user ' + user + ' should be addded to scheduler.') - + #create the relation if not exists + + if not dryrun: + #sid_create_update_user_approver_scheduler_change_management(diego, fqdn, res_rw_user, user, sid_results[1][user]['uid'], 'scheduler', need_to_update) + pass + else: + logger.error('dry run, user not add/update from the scheduler role.') + continue + + params = {} sid_a_results = diego.diego_run_dieget_by_name('sid_approver_check', params) for user in sid_a_results[1]: @@ -845,12 +922,13 @@ def main(): if user not in sid_need_approver or user not in approver_scheduler_list: logger.error('SID user ' + user + ' should not be an approver.') if not dryrun: - sid_update_user_exlude_approver_scheduler_change_management(diego, fqdn, res_rw_user, user, sid_a_results[1][user]['uid'], 'approver') + sid_update_user_exlude_approver_scheduler_change_management(diego, fqdn, res_rw_user, user, sid_results[1][user]['uid'], 'approver') #pass else: logger.error('dry run, user not removed from the approver role.') continue - + + print(sid_need_approver, "APRROVERS-LIST") for user in sid_need_approver: if user in devnull_user: continue @@ -862,7 +940,13 @@ def main(): elif user not in sid_a_results[1]: need_to_create = True logger.debug('SID user ' + user + ' should be addded to approver.') - + #create the relation if not exists + if not dryrun: + #sid_create_update_user_approver_scheduler_change_management(diego, fqdn, res_rw_user, user, sid_results[1][user]['uid'], 'approver', need_to_update) + pass + else: + logger.error('dry run, user not add/update from the approver role.') + continue ''' * scrat department DIGIT.C.4.006 is a departement -- GitLab