Skip to content

Commit 3be1821

Browse files
authored
Merge pull request #32 from cisco-en-programmability/private/vivekraj2000/CSCwu68660
Fixed idempotency in user_rolw_workflow_manager
2 parents ca5437d + 9b40bb1 commit 3be1821

2 files changed

Lines changed: 38 additions & 16 deletions

File tree

plugins/modules/user_role_workflow_manager.py

Lines changed: 37 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3943,31 +3943,53 @@ def user_requires_update(self, current_user, current_role):
39433943
else:
39443944
update_user_params["email"] = current_email
39453945

3946-
# Compare and update role list
3946+
# Compare role lists by resolving desired role names to role IDs.
39473947
desired_role_list = self.want.get("role_list")
39483948
current_role_list = current_user.get("role_list", [])
39493949
if desired_role_list is not None:
3950-
desired_role_name = desired_role_list[0].lower()
3951-
if desired_role_name in current_role:
3952-
role_id = current_role[desired_role_name]
3953-
if current_role_list[0] != role_id:
3954-
self.log(
3955-
"Updating role list with new role ID {0}.".format(role_id),
3956-
"DEBUG",
3957-
)
3958-
update_user_params["role_list"] = [role_id]
3959-
update_needed = True
3950+
desired_role_ids = []
3951+
missing_role_names = []
3952+
3953+
for role_name in desired_role_list:
3954+
desired_role_name = role_name.lower()
3955+
role_id = current_role.get(desired_role_name)
3956+
if role_id:
3957+
desired_role_ids.append(role_id)
39603958
else:
3961-
update_user_params["role_list"] = current_role_list
3962-
else:
3959+
missing_role_names.append(role_name)
3960+
3961+
if missing_role_names:
39633962
self.log(
3964-
"Role {0} not found in current_role. Setting role list to empty.".format(
3965-
desired_role_name
3963+
"Role(s) {0} not found in current_role. Setting role list to empty.".format(
3964+
", ".join(missing_role_names)
39663965
),
39673966
"DEBUG",
39683967
)
39693968
update_user_params["role_list"] = []
39703969
update_needed = True
3970+
else:
3971+
normalized_current_role_ids = []
3972+
for role in current_role_list:
3973+
normalized_role = role.lower()
3974+
normalized_current_role_ids.append(
3975+
current_role.get(normalized_role, role).lower()
3976+
)
3977+
3978+
normalized_desired_role_ids = [
3979+
role_id.lower() for role_id in desired_role_ids
3980+
]
3981+
3982+
if set(normalized_current_role_ids) != set(normalized_desired_role_ids):
3983+
self.log(
3984+
"Updating role list with new role IDs {0}.".format(
3985+
desired_role_ids
3986+
),
3987+
"DEBUG",
3988+
)
3989+
update_user_params["role_list"] = desired_role_ids
3990+
update_needed = True
3991+
else:
3992+
update_user_params["role_list"] = current_role_list
39713993
else:
39723994
update_user_params["role_list"] = current_role_list
39733995

tests/unit/modules/catalyst/fixtures/user_role_workflow_manager.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@
200200
"authSource": "internal",
201201
"passphraseUpdateTime": "1712759668555",
202202
"roleList": [
203-
"6486ce97ff1f0d0c8be622f6"
203+
"SUPER-ADMIN-ROLE"
204204
],
205205
"userId": "6486ce98ff1f0d0c8be622f7",
206206
"email": "ajith.andrew@example.com",

0 commit comments

Comments
 (0)