[PR #9768/4c11902f backport][stable-10] keycloak_realm: remove realm id requirement (#9810)

keycloak_realm: remove realm id requirement (#9768)

* remove realm id requirement

* replace id with realm

* replace id with realm in documentation

* add changelog fragment

* Update changelogs/fragments/9768-keycloak_realm-remove-id-requirement.yaml

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update changelogs/fragments/9768-keycloak_realm-remove-id-requirement.yaml

Co-authored-by: Felix Fontein <felix@fontein.de>

* add comment to get_realm_by_id

* Update plugins/module_utils/identity/keycloak/keycloak.py

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 4c11902fdc)

Co-authored-by: gruenbauer@b1-systems.de <gruenbauer@b1-systems.de>
stable-10
patchback[bot] 2025-02-27 21:59:36 +01:00 committed by GitHub
parent 7d8f5559e2
commit 91d515bd1e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 11 additions and 11 deletions

View File

@ -0,0 +1,2 @@
minor_changes:
- keycloak_realm - remove ID requirement when creating a realm to allow Keycloak generating its own realm ID (https://github.com/ansible-collections/community.general/pull/9768).

View File

@ -456,6 +456,8 @@ class KeycloakAPI(object):
self.module.fail_json(msg='Could not obtain realm %s: %s' % (realm, str(e)),
exception=traceback.format_exc())
# The Keycloak API expects the realm name (like `master`) not the ID when fetching the realm data.
# See the Keycloak API docs: https://www.keycloak.org/docs-api/latest/rest-api/#_realms_admin
def get_realm_by_id(self, realm='master'):
""" Obtain realm representation by id

View File

@ -528,8 +528,7 @@ EXAMPLES = r"""
auth_realm: master
auth_username: USERNAME
auth_password: PASSWORD
id: realm
realm: realm
realm: unique_realm_name
state: present
- name: Delete a Keycloak realm
@ -539,7 +538,7 @@ EXAMPLES = r"""
auth_realm: master
auth_username: USERNAME
auth_password: PASSWORD
id: test
realm: unique_realm_name
state: absent
"""
@ -554,7 +553,7 @@ proposed:
description: Representation of proposed realm.
returned: always
type: dict
sample: {id: "test"}
sample: {realm: "test"}
existing:
description: Representation of existing realm (sample is truncated).
@ -767,9 +766,6 @@ def main():
# Process a creation
result['changed'] = True
if 'id' not in desired_realm:
module.fail_json(msg='id needs to be specified when creating a new realm')
if module._diff:
result['diff'] = dict(before='', after=sanitize_cr(desired_realm))
@ -778,11 +774,11 @@ def main():
# create it
kc.create_realm(desired_realm)
after_realm = kc.get_realm_by_id(desired_realm['id'])
after_realm = kc.get_realm_by_id(desired_realm['realm'])
result['end_state'] = sanitize_cr(after_realm)
result['msg'] = 'Realm %s has been created.' % desired_realm['id']
result['msg'] = 'Realm %s has been created.' % desired_realm['realm']
module.exit_json(**result)
else:
@ -816,7 +812,7 @@ def main():
result['diff'] = dict(before=before_realm_sanitized,
after=sanitize_cr(after_realm))
result['msg'] = 'Realm %s has been updated.' % desired_realm['id']
result['msg'] = 'Realm %s has been updated.' % desired_realm['realm']
module.exit_json(**result)
else:
@ -835,7 +831,7 @@ def main():
result['proposed'] = {}
result['end_state'] = {}
result['msg'] = 'Realm %s has been deleted.' % before_realm['id']
result['msg'] = 'Realm %s has been deleted.' % before_realm['realm']
module.exit_json(**result)