diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b2753c..3999ca9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,46 @@ ## 2026-08-06 — le chemin nord-sud devient dérivable +### Le supernet du tenant devient un intrant dérivé + +Keycloak ne démarrait pas : + +``` +FATAL: aucune entrée dans pg_hba.conf pour l'hôte « 10.27.17.11 », + utilisateur « keycloak », base « keycloak », chiffrement SSL +``` + +PostgreSQL n'autorisait que `10.11.0.0/16` — l'ancien monde — pour un tenant en +`10.27.0.0/16`. La valeur était figée dans `group_vars`, sous un commentaire +*« AJUSTER au sous-réseau réel de déploiement »* que personne n'avait suivi. Un commentaire +qui demande une action est une action qui n'aura pas lieu. + +**Postfix portait la même valeur périmée**, et aurait échoué de la même façon plus tard, sur +le courriel. **Technolibre aussi** : `10.12.0.0/16` pour un tenant en `10.21.0.0/16`. Quatre +fichiers, une seule faute, répétée parce que recopiée. + +`instancier` émet désormais `setops_supernet`, dérivé du seed comme le VMID et l'adresse. +Les quatre fichiers le consomment, et la valeur suit le tenant sans être saisie : + +``` +Chezlepro 10.27.0.0/16 +Technolibre 10.21.0.0/16 +``` + +### La chaîne d'identité est debout + +``` +keycloak active issuer = http://keycloak.chezlepro.internal:8080/realms/… +slapd active namingContexts: dc=chezlepro,dc=internal +``` + +`idm-01` : dix playbooks, aucun échec, fédération LDAP configurée. Et les quatre premiers se +sont rejoués à **zéro changement** — tout ce qui a été corrigé aujourd'hui converge. + +Quatre VM sur quatorze sont entièrement déployées : l'autorité de certification, le DNS +autoritatif, l'identité (annuaire + SSO) et les bases (PostgreSQL + Redis). + + ### Trois défauts que seul un vrai déploiement pouvait montrer `idm-01` — première VM d'une autre zone de sécurité (`t17iden`) — a prouvé le **routage diff --git a/scripts/instancier.py b/scripts/instancier.py index fd286f0..fa95320 100644 --- a/scripts/instancier.py +++ b/scripts/instancier.py @@ -41,6 +41,7 @@ from inventory_rules import ( integrations_de, integrations_universelles, liens_acceptes, + supernet_de, ) RACINE = Path(__file__).resolve().parents[1] @@ -192,6 +193,14 @@ def generer() -> dict: _, seq = fonction_seq(nom) d = deriver_nomenclature(str(srv.get("fonction", "")), seq, nomenclature) or {} hostvars = { + # Supernet du tenant, DERIVE du seed comme tout le reste. Il repond a la + # question « quels clients mon service doit-il accepter ? », posee par + # PostgreSQL (pg_hba), Postfix (reseaux de confiance) et tout service qui + # filtre par reseau. Le figer a la main dans group_vars, c'etait garantir + # qu'il devienne faux : les deux valeurs trouvees le 2026-08-07 dataient de + # l'ancien monde (10.11.0.0/16 pour un tenant en 10.27.0.0/16), avec un + # commentaire « AJUSTER » jamais suivi. PostgreSQL refusait Keycloak. + "setops_supernet": supernet_de(int(index_tenant)) if index_tenant is not None else None, "ansible_host": d.get("adresse_ip"), "ansible_user": "ansible", "proxmox_cidr": d.get("cidr"),