Set-OPS-Public/roles/resoudre_annuaire/README.md
Mathieu Benoit bff1396af3 resoudre_annuaire : un plan muet fait refuser, plus de nom devine
Le defaut `id-ldap-01` tenait des que le plan se taisait : la derivation depuis
`applications.<app>.hote` etait sautee, et le role batissait `ldaps://<ce nom>`
— 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
2026-09-29 04:16:02 -04:00

49 lines
2.2 KiB
Markdown

# resoudre_annuaire
**Rôle utilitaire** (pas un groupe déployable) : dérive la connexion à l'annuaire interne
(OpenLDAP) de façon déclarative, à partir du `domaine_interne` et de l'hôte d'annuaire.
Remplace le câblage LDAP qui était répété dans `serveur_dovecot`, `serveur_postfix`,
`serveur_keycloak` et `serveur_icingaweb2`. **Un seul endroit** fixe le nom de l'hôte
d'annuaire.
## Usage
```yaml
- name: Résoudre l'annuaire (rôle partagé)
ansible.builtin.include_role:
name: resoudre_annuaire
- name: Adopter la connexion annuaire pour <service>
ansible.builtin.set_fact:
<service>_ldap_uri: "{{ resoudre_annuaire_uri }}"
<service>_ldap_base_dn: "{{ resoudre_annuaire_base_dn }}"
```
## Sorties (facts, persistent après `include_role`)
| Fact | Exemple |
| --- | --- |
| `resoudre_annuaire_fqdn` | `id-ldap-01.exemple.internal` |
| `resoudre_annuaire_uri` | `ldaps://id-ldap-01.exemple.internal` |
| `resoudre_annuaire_base_dn` | `dc=exemple,dc=internal` |
| `resoudre_annuaire_users_dn` | `ou=people,dc=exemple,dc=internal` |
| `resoudre_annuaire_bind_dn` | `cn=admin,dc=exemple,dc=internal` |
| `resoudre_annuaire_bind_password` | Déréférencé de la voûte (`no_log`) |
## Variables
| Variable | Défaut | Rôle |
| --- | --- | --- |
| `resoudre_annuaire_hote` | `""` | Dérivé du PLAN (`applications.<app>.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 |
| `resoudre_annuaire_secret` | `vault_openldap_admin` | **Nom** de la variable de voûte |
## Notes
- Les sorties sont posées en `set_fact` (pas en `defaults`) : les defaults d'un rôle inclus
ne survivent pas à la fin de son exécution, contrairement aux facts.
- Le base DN est **dérivé** du `domaine_interne` (`a.b` → `dc=a,dc=b`) : aucun DN codé en dur.
- Le rôle exige un `domaine_interne` non vide (assertion).
- LDAPS suppose la confiance step_ca posée par `client_pki` sur le nœud consommateur.
## Prérequis
- `domaine_interne` défini ; voûte déverrouillée (`ANSIBLE_VAULT_PASSWORD_FILE`).