Liste déclarative serveur_keycloak_clients (clientId, redirect_uris, web_origins, secret) → tasks/clients-oidc.yml enregistre chaque client confidentiel via kcadm (create-si-absent, no_log). Décision côté Keycloak (creds admin non répandus dans les rôles app) ; secret = même var de voûte que l'app. Prouvé : client grafana supprimé → rôle → recréé → testmail se connecte à Grafana ; redéploiement idempotent (changed=0). Déploiement Grafana au SSO désormais autonome. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
34 lines
1.6 KiB
YAML
34 lines
1.6 KiB
YAML
---
|
|
# Enregistre les clients OIDC applicatifs dans le realm via kcadm — idempotent.
|
|
# Crée le client s'il est absent (confidentiel, authorization code). La réconciliation
|
|
# fine (mettre à jour un client existant) n'est pas faite : create-si-absent.
|
|
- name: Enregistrer les clients OIDC (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 clients -r {{ serveur_keycloak_realm }} -q clientId={{ item.clientId }} 2>/dev/null \
|
|
| grep -q '"{{ item.clientId }}"'; then
|
|
echo SETOPS_OK
|
|
else
|
|
"$KC" create clients -r {{ serveur_keycloak_realm }} \
|
|
-s clientId={{ item.clientId }} -s enabled=true -s protocol=openid-connect \
|
|
-s publicClient=false -s standardFlowEnabled=true -s directAccessGrantsEnabled=false \
|
|
-s 'redirectUris={{ item.redirect_uris | to_json }}' \
|
|
-s 'webOrigins={{ item.web_origins | default([]) | to_json }}' \
|
|
-s secret="$OIDC_SECRET" >/dev/null
|
|
echo SETOPS_CHANGED
|
|
fi
|
|
environment:
|
|
KC_ADMIN_PW: "{{ serveur_keycloak_admin_password }}"
|
|
OIDC_SECRET: "{{ item.secret }}"
|
|
loop: "{{ serveur_keycloak_clients }}"
|
|
loop_control:
|
|
label: "{{ item.clientId }}"
|
|
register: serveur_keycloak_client_reg
|
|
changed_when: "'SETOPS_CHANGED' in serveur_keycloak_client_reg.stdout"
|
|
no_log: true
|
|
when: not ansible_check_mode
|