--- - name: Resoudre l'annuaire (role partage) ansible.builtin.include_role: name: resoudre_annuaire - name: Adopter la connexion annuaire pour Dovecot ansible.builtin.set_fact: serveur_dovecot_ldap_uris: "{{ resoudre_annuaire_uri }}:{{ resoudre_annuaire_port }}" serveur_dovecot_ldap_base: "{{ resoudre_annuaire_base_dn }}" serveur_dovecot_ldap_bind_dn: "{{ resoudre_annuaire_bind_dn }}" serveur_dovecot_ldap_bind_password: "{{ resoudre_annuaire_bind_password }}" no_log: true - name: Exiger le mot de passe de bind LDAP (Vault) ansible.builtin.assert: that: - serveur_dovecot_ldap_bind_password | length > 0 fail_msg: "serveur_dovecot_ldap_bind_password requis (via Ansible Vault, ex. vault_openldap_admin)." - name: Installer Dovecot ansible.builtin.apt: name: "{{ serveur_dovecot_paquets }}" state: present update_cache: true - name: Créer le groupe vmail ansible.builtin.group: name: "{{ serveur_dovecot_vmail_utilisateur }}" gid: "{{ serveur_dovecot_vmail_gid }}" system: true - name: Créer l'utilisateur vmail ansible.builtin.user: name: "{{ serveur_dovecot_vmail_utilisateur }}" uid: "{{ serveur_dovecot_vmail_uid }}" group: "{{ serveur_dovecot_vmail_utilisateur }}" system: true home: "{{ serveur_dovecot_vmail_base }}" create_home: false shell: /usr/sbin/nologin - name: Créer le répertoire de stockage des boîtes ansible.builtin.file: path: "{{ serveur_dovecot_vmail_base }}" state: directory owner: "{{ serveur_dovecot_vmail_utilisateur }}" group: "{{ serveur_dovecot_vmail_utilisateur }}" mode: "0750" # --- Pont de certificat step_ca (déposé par client_pki) --- - name: TLS — créer le répertoire des certificats ansible.builtin.file: path: "{{ serveur_dovecot_tls_dir }}" state: directory owner: root group: root mode: "0750" when: serveur_dovecot_tls_actif | bool - name: TLS — déployer le script de synchronisation du certificat ansible.builtin.template: src: setops-dovecot-cert-sync.sh.j2 dest: /usr/local/sbin/setops-dovecot-cert-sync owner: root group: root mode: "0755" when: serveur_dovecot_tls_actif | bool - name: TLS — déployer les unités de synchronisation (service + path) ansible.builtin.template: src: "{{ item.s }}" dest: "{{ item.d }}" owner: root group: root mode: "0644" loop: - { s: "setops-dovecot-cert-sync.service.j2", d: "/etc/systemd/system/setops-dovecot-cert-sync.service" } - { s: "setops-dovecot-cert-sync.path.j2", d: "/etc/systemd/system/setops-dovecot-cert-sync.path" } loop_control: label: "{{ item.d | basename }}" when: serveur_dovecot_tls_actif | bool - name: TLS — synchroniser le certificat maintenant ansible.builtin.command: /usr/local/sbin/setops-dovecot-cert-sync changed_when: false when: - serveur_dovecot_tls_actif | bool - not ansible_check_mode - name: TLS — activer la surveillance du certificat (renouvellement) ansible.builtin.systemd: name: setops-dovecot-cert-sync.path enabled: true state: started daemon_reload: true when: - serveur_dovecot_tls_actif | bool - not ansible_check_mode - name: TLS — vérifier que le certificat est en place ansible.builtin.stat: path: "{{ serveur_dovecot_tls_dir }}/cert.pem" register: serveur_dovecot_cert when: serveur_dovecot_tls_actif | bool - name: TLS — exiger le certificat (intégration client_pki requise sur ce nœud) ansible.builtin.assert: that: - serveur_dovecot_cert.stat.exists | default(false) fail_msg: >- Aucun certificat step_ca ({{ serveur_dovecot_tls_source_cert }}). Le nœud Dovecot doit porter l'intégration client_pki. Déploie-la, puis relance. when: - serveur_dovecot_tls_actif | bool - not ansible_check_mode # --- Configuration --- - name: Détecter si Postfix est co-localisé (pour les sockets d'intégration) ansible.builtin.command: getent passwd postfix register: serveur_dovecot_postfix_check changed_when: false failed_when: false - name: Mémoriser la présence de Postfix ansible.builtin.set_fact: serveur_dovecot_postfix_present: "{{ serveur_dovecot_postfix_check.rc == 0 }}" - name: Déployer la configuration Set-OPS (drop-in Dovecot 2.4) ansible.builtin.template: src: 99-setops.conf.j2 dest: /etc/dovecot/conf.d/99-setops.conf owner: root group: root mode: "0640" no_log: true # contient le mot de passe de bind LDAP notify: Redémarrer dovecot - name: Désactiver l'auth système par défaut (LDAP est l'unique autorité) ansible.builtin.replace: path: /etc/dovecot/conf.d/10-auth.conf regexp: '^!include auth-system\.conf\.ext' replace: '#!include auth-system.conf.ext' notify: Redémarrer dovecot - name: Valider la configuration Dovecot (doveconf) ansible.builtin.command: doveconf -n changed_when: false when: not ansible_check_mode - name: Activer et démarrer Dovecot when: not ansible_check_mode ansible.builtin.systemd: name: "{{ serveur_dovecot_service }}" enabled: true state: started daemon_reload: true