Set-OPS-Public/roles/serveur_keycloak/tasks/jeton-admin.yml
Daniel Allaire 19871894ed keycloak : un jeton frais la ou on s'en sert ; grafana : un echec lisible
Technolibre remonte depuis zero une seconde fois — 14 hotes, 2588 taches ok,
0 failed. Deux defauts trouves en chemin.

LE JETON KEYCLOAK VIVAIT 60 SECONDES. Il etait pris dans politique-mdp.yml —
le 2e des neuf fichiers du role — et reutilise jusqu'au 8e. Entre les deux,
six fichiers de travail dont groupes-ldap.yml et ses reprises espacees de
15 s. Sur une construction NEUVE le temps depasse la minute : 401. Sur un
REJEU tout est converge, ca va vite, ca passe.

D'ou les deux echecs du matin, chaque fois suivis d'un succes au rejeu, qui
donnaient l'illusion d'une course au demarrage de Keycloak. J'avais ecrit
alors ne pas avoir de mesure qui le prouve — c'etait juste, et la cause etait
l'AGE du jeton. jeton-admin.yml en prend un frais la ou on s'en sert.

GRAFANA : UN ECHEC TRANSITOIRE RENDU ILLISIBLE. Premier demarrage, apres 67 s
de migrations : « failed to create admin user: no such column: uid », alors
que la migration qui ajoute cette colonne etait journalisee comme reussie.
Base neuve : tout remigre, service actif, colonne presente. L'incident ne
s'est pas reproduit et Chezlepro ne l'a jamais eu — je n'ai donc PAS corrige
la cause, faute de l'avoir reproduite. J'ai corrige ce qui la rendait
indechiffrable :

- Restart=on-failure venait du paquet SANS RestartSec, donc 100 ms : six
  relances en une seconde, chacune rejouant les migrations sur la meme base
  SQLite. Un echec unique se presentait comme un desastre. RestartSec=10 ;
- la rotation du compte de secours echouait cinq fois sous no_log en
  annoncant « the output has been hidden », alors que la vraie cause etait
  ailleurs et lisible : le serveur ne demarrait pas. Une attente explicite sur
  le port precede desormais la CLI, avec un message qui renvoie a la PREMIERE
  erreur du journal.

Troisieme fois dans la journee que no_log masque la cause au moment ou elle
sert : une garde qui protege un secret ne doit pas emporter le diagnostic.

Verifie : 7 devis sur Technolibre — MTU, identite, certificats, PostgreSQL,
courriel, frontiere CONFORME ; prouver.py 35 OK ; ansible-lint production.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 20:19:50 -04:00

32 lines
1.5 KiB
YAML

---
# Un jeton d'administration FRAIS, a inclure juste avant de s'en servir.
#
# POURQUOI CE FICHIER EXISTE. Le jeton etait obtenu une seule fois, dans
# `politique-mdp.yml` — le 2e des neuf fichiers du role — puis reutilise jusqu'au 8e.
# Or le jeton `admin-cli` du realm `master` vit **60 secondes** par defaut. Entre les
# deux, six fichiers de travail, dont `groupes-ldap.yml` et ses reprises espacees de 15 s.
#
# Sur un deploiement NEUF, le temps ecoule depasse la minute et l'appel suivant se prend
# un 401. Sur un REJEU, tout est deja converge, ca va vite, et ca passe. C'est exactement
# ce qu'on a observe le 2026-08-10 : echec sur la construction, succes au rejeu — deux
# fois, ce qui donnait l'illusion d'une course aleatoire au demarrage de Keycloak.
#
# Un jeton se prend donc la ou on l'utilise, jamais « une fois pour toutes ». C'est
# gratuit : Keycloak repond en quelques millisecondes en local.
- name: Obtenir un jeton d'administration frais
ansible.builtin.uri:
url: "http://localhost:8080/realms/master/protocol/openid-connect/token"
method: POST
body_format: form-urlencoded
body:
grant_type: password
client_id: admin-cli
username: "{{ serveur_keycloak_admin_user }}"
password: "{{ serveur_keycloak_admin_password }}"
status_code: [200]
register: serveur_keycloak_pol_jeton
no_log: true
# Keycloak peut encore etre en train de recharger apres une tache precedente.
retries: 5
delay: 4
until: serveur_keycloak_pol_jeton is succeeded