From bff1396af3d313e820bb550d7f6b0e9e67a4cc57 Mon Sep 17 00:00:00 2001 From: Mathieu Benoit Date: Tue, 29 Sep 2026 03:55:06 -0400 Subject: [PATCH] resoudre_annuaire : un plan muet fait refuser, plus de nom devine MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le defaut `id-ldap-01` tenait des que le plan se taisait : la derivation depuis `applications..hote` etait sautee, et le role batissait `ldaps://` — une machine qui n est dans aucun plan. Le consommateur echouait au premier bind, apres un deploiement passe au vert de bout en bout. La derivation avait ete ajoutee pour corriger exactement cela ; le defaut est reste et ramenait l ancien comportement. Il est desormais vide, et une assertion refuse AU DEPLOIEMENT. Une instance garde le droit de poser l hote explicitement : ce qui disparait est la valeur DEVINEE, pas la surcharge. Assisted-by: Claude Opus 5 --- roles/resoudre_annuaire/README.md | 2 +- roles/resoudre_annuaire/defaults/main.yml | 14 +++++++++++++- roles/resoudre_annuaire/tasks/main.yml | 11 +++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/roles/resoudre_annuaire/README.md b/roles/resoudre_annuaire/README.md index 4f8326d..f0e5f42 100644 --- a/roles/resoudre_annuaire/README.md +++ b/roles/resoudre_annuaire/README.md @@ -32,7 +32,7 @@ d'annuaire. ## Variables | Variable | Défaut | Rôle | | --- | --- | --- | -| `resoudre_annuaire_hote` | `id-ldap-01` | **Le** point où le nom d'hôte est fixé (surchargeable par instance) | +| `resoudre_annuaire_hote` | `""` | Dérivé du PLAN (`applications..hote`) ; surchargeable par instance. Vide et non dérivé, le rôle REFUSE plutôt que de deviner | | `resoudre_annuaire_port` | `636` | Port LDAPS | | `resoudre_annuaire_encryption` | `ldaps` | Schéma de l'URI | | `resoudre_annuaire_bind_cn` | `admin` | CN du compte de bind | diff --git a/roles/resoudre_annuaire/defaults/main.yml b/roles/resoudre_annuaire/defaults/main.yml index 0afd8c2..592e28e 100644 --- a/roles/resoudre_annuaire/defaults/main.yml +++ b/roles/resoudre_annuaire/defaults/main.yml @@ -5,7 +5,19 @@ # aucune machine du plan (l'annuaire vit sur `idm-01`), et Postfix ne pouvait pas se lier. # Constaté le 2026-08-07. Le repli ci-dessous ne sert que si le plan est muet. resoudre_annuaire_app: "openldap" -resoudre_annuaire_hote: "id-ldap-01" +# VIDE, ET C'EST LE DEFAUT LUI-MEME QUI ETAIT LE PIEGE. Un nom ecrit ici tient des +# que le plan se tait : la derivation est sautee, le role bâtit +# `ldaps://.`, et le consommateur echoue a l'execution sur +# « Unable to bind » en nommant une machine qui n'est dans aucun plan. +# +# La correction qui a introduit la derivation depuis le plan a laisse ce defaut en +# place ; il ramene donc l'ancien comportement chaque fois que l'application n'est +# pas au plan. Vide, l'assertion qui suit refuse AU DEPLOIEMENT, la ou le nom +# devine ne se voyait qu'au premier bind. +# +# Une instance garde le droit de le poser explicitement : ce qui disparait est la +# valeur DEVINEE, pas la surcharge. +resoudre_annuaire_hote: "" resoudre_annuaire_port: 636 resoudre_annuaire_encryption: "ldaps" # COMPTE DE LIAISON — CHAQUE CONSOMMATEUR A LE SIEN (2026-09-13). diff --git a/roles/resoudre_annuaire/tasks/main.yml b/roles/resoudre_annuaire/tasks/main.yml index 79bc3db..3cecee8 100644 --- a/roles/resoudre_annuaire/tasks/main.yml +++ b/roles/resoudre_annuaire/tasks/main.yml @@ -37,6 +37,17 @@ resoudre_annuaire_hote: "{{ (applications | default({})).get(resoudre_annuaire_app, {}).get('hote') }}" when: ((applications | default({})).get(resoudre_annuaire_app, {}).get('hote') | default('', true)) | length > 0 +- name: Exiger que le plan nomme l'hôte de l'annuaire + ansible.builtin.assert: + that: + - resoudre_annuaire_hote | length > 0 + fail_msg: >- + L'application « {{ resoudre_annuaire_app }} » n'est pas au plan, et aucune + instance ne pose `resoudre_annuaire_hote` : rien ne nomme l'annuaire. Le rôle + qui le demande ne peut pas s'y lier. Un nom deviné ici produirait + « Unable to bind » sur une machine qui n'est dans aucun plan — et le + déploiement passerait au VERT jusque-là. + # set_fact (pas les defaults) pour que ces valeurs persistent dans le rôle consommateur # après include_role (les defaults du rôle inclus ne fuient pas hors de son exécution). - name: Dériver la connexion à l'annuaire