Skip to content

Commit f455893

Browse files
committed
make add_user_to_manage_group idempotent.
1 parent c8ac382 commit f455893

1 file changed

Lines changed: 47 additions & 14 deletions

File tree

src/mas/devops/users.py

Lines changed: 47 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -508,7 +508,7 @@ def resync_users(self, user_ids):
508508
raise Exception(response.text)
509509

510510
def create_or_get_manage_api_key_for_user(self, user_id):
511-
self.logger.info(f"Attempting to create Manage API Key for user {user_id}")
511+
self.logger.debug(f"Attempting to create Manage API Key for user {user_id}")
512512
url = f"{self.manage_api_url_internal}/maximo/api/os/mxapiapikey"
513513
querystring = {
514514
"ccm": 1,
@@ -545,7 +545,9 @@ def create_or_get_manage_api_key_for_user(self, user_id):
545545
# any other 400 error is unexpected
546546
raise Exception(response.text)
547547

548-
elif response.status_code != 201:
548+
elif response.status_code == 201:
549+
self.logger.info(f"Creating new Manage API Key for user {user_id}")
550+
else:
549551
# any other status code is unexpected
550552
raise Exception(response.text)
551553

@@ -580,7 +582,6 @@ def get_manage_api_key_for_user(self, user_id):
580582
headers = {
581583
"Accept": "application/json",
582584
}
583-
self.logger.debug(f" > {url} {querystring}")
584585

585586
response = requests.get(
586587
url,
@@ -589,16 +590,16 @@ def get_manage_api_key_for_user(self, user_id):
589590
verify=self.manage_internal_ca_pem_file_path,
590591
cert=self.manage_internal_client_pem_file_path
591592
)
592-
self.logger.debug(f" < {response.status_code}")
593-
if response.status_code != 200:
594-
raise Exception(response.text)
595593

596-
json = response.json()
594+
if response.status_code == 200:
595+
json = response.json()
597596

598-
if "member" in json and len(json["member"]) > 0:
599-
return json["member"][0]
597+
if "member" in json and len(json["member"]) > 0:
598+
return json["member"][0]
600599

601-
return None
600+
return None
601+
602+
raise Exception(response.text)
602603

603604
def delete_manage_api_key(self, manage_api_key):
604605
self.logger.info(f"Deleting Manage API Key for user {manage_api_key['userid']}")
@@ -637,7 +638,7 @@ def get_manage_group_id(self, group_name):
637638
querystring = {
638639
"ccm": 1,
639640
"lean": 1,
640-
"oslc.select": "*",
641+
"oslc.select": "maxgroupid",
641642
"oslc.where": f"groupname=\"{group_name}\"",
642643
}
643644
headers = {
@@ -663,10 +664,42 @@ def get_manage_group_id(self, group_name):
663664

664665
return None
665666

667+
def is_user_in_manage_group(self, group_name, user_id):
668+
669+
group_id = self.get_manage_group_id(group_name)
670+
671+
url = f"{self.manage_api_url_internal}/maximo/api/os/mxapigroup/{group_id}/groupuser"
672+
querystring = {
673+
"lean": 1,
674+
"oslc.where": f"userid=\"{user_id}\"",
675+
}
676+
headers = {
677+
"Accept": "application/json",
678+
"apikey": self.manage_maxadmin_api_key["apikey"], # <--- careful, don't log headers as-is (apikey is sensitive)
679+
}
680+
681+
response = requests.get(
682+
url,
683+
headers=headers,
684+
params=querystring,
685+
verify=self.manage_internal_ca_pem_file_path,
686+
)
687+
688+
if response.status_code == 200:
689+
json = response.json()
690+
return "member" in json and len(json["member"]) > 0
691+
692+
raise Exception(f"{response.status_code} {response.text}")
693+
666694
def add_user_to_manage_group(self, user_id, group_name):
667695
'''
668-
TODO: idempotency
696+
No-op if user_id is already a member of the manage security group
669697
'''
698+
699+
if self.is_user_in_manage_group(group_name, user_id):
700+
self.logger.info(f"User {user_id} is already a member of Manage Security Group {group_name}")
701+
return None
702+
670703
self.logger.info(f"Adding user {user_id} to Manage group {group_name}")
671704

672705
group_id = self.get_manage_group_id(group_name)
@@ -905,5 +938,5 @@ def create_initial_user_for_saas(self, user, user_type):
905938
for mas_application_id in mas_application_ids:
906939
self.check_user_sync(user_id, mas_application_id)
907940

908-
# if "manage" in mas_application_ids:
909-
# self.add_user_to_manage_group(user_id, "MAXADMIN")
941+
if "manage" in mas_application_ids:
942+
self.add_user_to_manage_group(user_id, "MAXADMIN")

0 commit comments

Comments
 (0)