Skip to content

Commit

Permalink
[PR #8761/982b8d89 backport][stable-8] keycloak_user_federation: sort…
Browse files Browse the repository at this point in the history
… desired and after mappers by name (#8836)

keycloak_user_federation: sort desired and after mappers by name (#8761)

* sort desired mappers by name

* sort mappers fetched after update by name

* only sort mapper list if there are desired mappers specified

* add fallback `''` in case `name` is not a key or `None` when sorting mappers

* add changelog fragment

(cherry picked from commit 982b8d8)

Co-authored-by: fgruenbauer <gruenbauer@b1-systems.de>
  • Loading branch information
patchback[bot] and fgruenbauer authored Sep 8, 2024
1 parent 765fc79 commit 586fdef
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
bugfixes:
- keycloak_user_federation - sort desired and after mapper list by name (analog to before mapper list) to minimize diff and make change detection more accurate (https://github.com/ansible-collections/community.general/pull/8761).
5 changes: 3 additions & 2 deletions plugins/modules/keycloak_user_federation.py
Original file line number Diff line number Diff line change
Expand Up @@ -868,7 +868,7 @@ def main():

# if user federation exists, get associated mappers
if cid is not None and before_comp:
before_comp['mappers'] = sorted(kc.get_components(urlencode(dict(parent=cid)), realm), key=lambda x: x.get('name'))
before_comp['mappers'] = sorted(kc.get_components(urlencode(dict(parent=cid)), realm), key=lambda x: x.get('name') or '')

# Build a proposed changeset from parameters given to this module
changeset = {}
Expand Down Expand Up @@ -909,6 +909,7 @@ def main():
if changeset.get('mappers') is None:
changeset['mappers'] = list()
changeset['mappers'].append(new_mapper)
changeset['mappers'] = sorted(changeset['mappers'], key=lambda x: x.get('name') or '')

# Prepare the desired values using the existing values (non-existence results in a dict that is save to use as a basis)
desired_comp = before_comp.copy()
Expand Down Expand Up @@ -1018,7 +1019,7 @@ def main():
kc.create_component(mapper, realm)

after_comp = kc.get_component(cid, realm)
after_comp['mappers'] = kc.get_components(urlencode(dict(parent=cid)), realm)
after_comp['mappers'] = sorted(kc.get_components(urlencode(dict(parent=cid)), realm), key=lambda x: x.get('name') or '')
after_comp_sanitized = sanitize(after_comp)
before_comp_sanitized = sanitize(before_comp)
result['end_state'] = after_comp_sanitized
Expand Down

0 comments on commit 586fdef

Please sign in to comment.