`resoudre_annuaire` fixait `id-ldap-01` en dur — une machine qui n'existe dans aucun plan. Postfix ne pouvait pas se lier : « Can't contact LDAP server ». L'intention etait juste et son commentaire le disait : un seul point ou le nom est fixe, au lieu d'etre repete dans chaque role. Mais ECRIT au lieu d'etre derive. Une valeur unique et fausse vaut mieux qu'une valeur repetee et fausse ; elle reste fausse. Le plan le declare (`applications.openldap.hote`) : c'est de la qu'elle vient. infra-mail-01 et edge-mta-01 deployees, 19 playbooks sans un echec. LMTP en TLS verifie, mynetworks sur le supernet derive, liaison LDAP etablie vers idm-01. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
44 lines
2.3 KiB
YAML
44 lines
2.3 KiB
YAML
---
|
|
# Rôle utilitaire (pas un groupe déployable) : résout la connexion à l'annuaire (OpenLDAP)
|
|
# de façon déclarative, dérivée du domaine interne + de l'hôte d'annuaire. Remplace le
|
|
# câblage LDAP répété dans serveur_dovecot/postfix/keycloak/icingaweb2.
|
|
#
|
|
# Sorties (facts) :
|
|
# resoudre_annuaire_fqdn — id-ldap-01.<domaine>
|
|
# resoudre_annuaire_uri — ldaps://id-ldap-01.<domaine>
|
|
# resoudre_annuaire_base_dn — dc=...,dc=...
|
|
# resoudre_annuaire_users_dn — ou=people,dc=...
|
|
# resoudre_annuaire_bind_dn — cn=admin,dc=...
|
|
# resoudre_annuaire_bind_password — secret déréférencé depuis la voûte (no_log)
|
|
- name: Exiger un domaine interne non vide
|
|
ansible.builtin.assert:
|
|
that:
|
|
- domaine_interne is defined
|
|
- domaine_interne | length > 0
|
|
fail_msg: "domaine_interne doit être défini pour résoudre l'annuaire."
|
|
|
|
- name: Charger le registre des applications (hôte de l'annuaire)
|
|
ansible.builtin.include_vars:
|
|
file: "{{ setops_plan_dir }}/applications.yml"
|
|
failed_when: false
|
|
|
|
- name: Dériver l'hôte de l'annuaire depuis le plan
|
|
ansible.builtin.set_fact:
|
|
resoudre_annuaire_hote: "{{ (applications | default({})).get(resoudre_annuaire_app, {}).get('hote') }}"
|
|
when: ((applications | default({})).get(resoudre_annuaire_app, {}).get('hote') | default('')) | length > 0
|
|
|
|
# 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
|
|
ansible.builtin.set_fact:
|
|
resoudre_annuaire_fqdn: "{{ resoudre_annuaire_hote }}.{{ domaine_interne }}"
|
|
resoudre_annuaire_uri: "{{ resoudre_annuaire_encryption }}://{{ resoudre_annuaire_hote }}.{{ domaine_interne }}"
|
|
resoudre_annuaire_port: "{{ resoudre_annuaire_port }}"
|
|
resoudre_annuaire_base_dn: "dc={{ domaine_interne.split('.') | join(',dc=') }}"
|
|
resoudre_annuaire_users_dn: "ou=people,dc={{ domaine_interne.split('.') | join(',dc=') }}"
|
|
resoudre_annuaire_bind_dn: "cn={{ resoudre_annuaire_bind_cn }},dc={{ domaine_interne.split('.') | join(',dc=') }}"
|
|
|
|
- name: Déréférencer le mot de passe de bind (Vault)
|
|
ansible.builtin.set_fact:
|
|
resoudre_annuaire_bind_password: "{{ lookup('vars', resoudre_annuaire_secret) }}"
|
|
no_log: true
|