Set-OPS-Public/roles/serveur_keycloak/tasks/roles-realm.yml
Daniel Allaire 3bf99fa7be keycloak : les roles de realm sont un prerequis de la projection des groupes
Second defaut trouve par la reconstruction from-zero. groupes-ldap.yml attache
grafana-admin a un groupe, mais c'est rbac-oidc.yml qui cree ce role — et il
s'executait APRES. Invisible tant que le realm existait avec ses roles crees
par un passage precedent ; sur un realm neuf, seuls les roles integres
existaient et l'attachement echouait.

Scinde plutot que deplace : rbac-oidc.yml fait trois choses aux dependances
DISTINCTES — creer les roles (ne depend de rien), poser un mapper sur les
clients (depend de clients-oidc), assigner des roles a des utilisateurs. Les
melanger etait le defaut. L'ordre est desormais roles -> groupes -> clients ->
mappers.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 17:04:15 -04:00

38 lines
1.8 KiB
YAML

---
# Creation des ROLES DE REALM — extrait de `rbac-oidc.yml` le 2026-08-08.
#
# Ces roles sont un PREREQUIS de `groupes-ldap.yml`, qui les attache aux groupes projetes
# depuis l'annuaire. Ils vivaient pourtant dans `rbac-oidc.yml`, execute APRES — et le
# defaut est reste invisible aussi longtemps que le realm a existe avec ses roles deja
# crees par un passage precedent.
#
# La premiere reconstruction from-zero l'a fait tomber au premier essai : realm neuf, et
# `groupes-ldap` a tente d'attacher `grafana-admin` a un groupe alors que seuls les roles
# integres (`offline_access`, `uma_authorization`, `default-roles-*`) existaient.
#
# Les deux autres etapes de `rbac-oidc.yml` restent APRES `clients-oidc.yml` : elles
# posent un mapper sur les clients et assignent des roles a des utilisateurs. Trois
# dependances distinctes, trois moments distincts — les melanger etait le defaut.
- name: Assurer les roles de realm (kcadm, idempotent)
ansible.builtin.shell:
executable: /bin/bash
cmd: |
set -euo pipefail
KC={{ serveur_keycloak_home }}/bin/kcadm.sh
"$KC" config credentials --server http://localhost:8080 --realm master \
--user {{ serveur_keycloak_admin_user }} --password "$KC_ADMIN_PW" >/dev/null
if "$KC" get roles/{{ item }} -r {{ serveur_keycloak_realm }} >/dev/null 2>&1; then
echo SETOPS_OK
else
"$KC" create roles -r {{ serveur_keycloak_realm }} -s name={{ item }} >/dev/null
echo SETOPS_CHANGED
fi
environment:
KC_ADMIN_PW: "{{ serveur_keycloak_admin_password }}"
loop: "{{ serveur_keycloak_realm_roles }}"
register: serveur_keycloak_role_reg
changed_when: "'SETOPS_CHANGED' in serveur_keycloak_role_reg.stdout"
no_log: true
when:
- not ansible_check_mode
- serveur_keycloak_realm_roles | length > 0