`idm-01` a prouve le routage inter-zone dans le VRF (10.27.19.21 -> 10.27.17.11, deux passerelles anycast) et leve trois defauts qu'aucun devis ne pouvait montrer : 1. Le handler de `client_pki` rechargeait `slapd` avant son installation — consequence directe de l'ordre retabli. Un consommateur absent n'est pas une erreur ; un vrai echec de rechargement reste fatal. 2. `resoudre_base` ne trouvait aucune base de portee `application` : Keycloak declare `consommateur: keycloak`, le role cherchait `serveur_keycloak`. Le lien est declare dans applications.yml — on le suit au lieu de retirer un prefixe a la main. 3. Keycloak attend PostgreSQL, pas encore deploye. Pas un defaut : `deployer` ne connait que l'ordre intra-hote, l'ordre inter-hotes est celui de `site`. Et deux attentes, sans lesquelles on ne peut pas enchainer creation et deploiement — donc sans lesquelles `myDay` ne reconstruit pas seul : SSH, puis cloud-init et les maj automatiques. `creer-vm` rend desormais une VM PRETE. `lock_timeout: 300` sur chaque tache apt complete l'attente : le verrou peut etre repris ENTRE deux taches, ce qu'une verification en amont ne previent pas. Defaut dans l'attente elle-meme : `unattended-upgrades` est un demon, toujours actif — l'inclure rendait la condition impossible a satisfaire. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| tasks | ||
| README.md | ||
resoudre_base
Rôle utilitaire (pas un groupe déployable) : résout l'entrée de base de données d'un
consommateur depuis le registre partagé instance/plan/bases-donnees.yml.
C'est la moitié « binding app→base » de la conception des liaisons — le lien est déclaré
côté base (le registre nomme son consommateur), et résolu dans le rôle consommateur,
pour que le secret ne quitte jamais ce rôle. Cf. docs/bindings-conception.md §5.
Usage
- name: Résoudre la base depuis le registre (rôle partagé)
ansible.builtin.include_role:
name: resoudre_base
vars:
resoudre_base_groupe: serveur_keycloak
Entrée
| Variable | Rôle |
|---|---|
resoudre_base_groupe |
Le groupe consommateur cherché dans le registre |
Sorties (facts, persistent après include_role)
| Fact | Contenu |
|---|---|
resoudre_base_entree |
L'entrée du registre (base, proprietaire, secret, serveur…) |
resoudre_base_db_password |
Mot de passe déréférencé de la voûte (no_log) |
resoudre_base_db_host |
FQDN du serveur de base |
resoudre_base_db_port |
Port (défaut 5432) |
Pourquoi le FQDN (et pas le nom court)
Décision d'architecture : non ambigu en fédération (data-sql-01 existe chez plusieurs
tenants) et nom canonique pour la vérification TLS verify-full. Résolu par le plancher
/etc/hosts (hosts_statiques).
Notes / limites
- Le rôle assère la présence d'une entrée (
base,proprietaire,secret) : aucun consommateur ne peut être déployé sans sa déclaration dans le plan. Message d'erreur explicite pointantinstance/plan/bases-donnees.yml. - Le secret est déréférencé par
lookup('vars', <nom>): le registre ne contient que le nom de la variable de voûte, jamais sa valeur. - Un seul consommateur par entrée (le premier trouvé gagne).
Prérequis
setops_plan_dirdéfini ; voûte déverrouillée (ANSIBLE_VAULT_PASSWORD_FILE).