--- # Journal des evenements du realm. Sans lui, Keycloak ne garde AUCUNE trace des # connexions : ni qui est entre, ni pourquoi une authentification a echoue. Constate # le 2026-08-08 en cherchant a diagnostiquer deux services qui n'aboutissaient pas — # tout etait correct cote serveur, et il n'existait aucun moyen de savoir ce que # l'utilisateur avait rencontre. # # C'est aussi une exigence d'exploitation : « un sysadmin l'exploite sans IA » suppose # qu'il puisse lire lui-meme ce qui s'est passe. - name: Lire la configuration du journal ansible.builtin.uri: url: "http://localhost:8080/admin/realms/{{ serveur_keycloak_realm }}/events/config" headers: Authorization: "Bearer {{ serveur_keycloak_pol_jeton.json.access_token }}" register: serveur_keycloak_journal_actuel no_log: true - name: Composer la configuration attendue # Une seule expression, pour obtenir des types NATIFS. Ecrit champ par champ, Jinja # rendait « True » et « 1209600 » en CHAINES : la comparaison au reel (booleen, entier) # ne pouvait jamais etre satisfaite, et la tache se declarait `changed` a chaque # passage. Un bruit permanent finit par masquer un vrai changement. ansible.builtin.set_fact: serveur_keycloak_journal_attendu: >- {{ {'eventsEnabled': serveur_keycloak_journal_actif | bool, 'eventsExpiration': serveur_keycloak_journal_retention | int, 'adminEventsEnabled': serveur_keycloak_journal_admin | bool, 'adminEventsDetailsEnabled': serveur_keycloak_journal_admin | bool} }} - name: Activer le journal des évènements du realm ansible.builtin.uri: url: "http://localhost:8080/admin/realms/{{ serveur_keycloak_realm }}/events/config" method: PUT status_code: [204] headers: Authorization: "Bearer {{ serveur_keycloak_pol_jeton.json.access_token }}" body_format: json body: "{{ serveur_keycloak_journal_actuel.json | combine(serveur_keycloak_journal_attendu) }}" no_log: true changed_when: true when: >- (serveur_keycloak_journal_actuel.json | combine(serveur_keycloak_journal_attendu)) != serveur_keycloak_journal_actuel.json