--- - name: Exiger la clé publique de sauvegarde ansible.builtin.assert: that: - serveur_backup_pubkey | length > 0 fail_msg: "serveur_backup_pubkey requis (clé publique de la paire de sauvegarde)." - name: Créer l'utilisateur de sauvegarde ansible.builtin.user: name: "{{ serveur_backup_utilisateur }}" home: "{{ serveur_backup_racine }}" shell: /bin/bash create_home: true system: true - name: Sécuriser la racine des dépôts ansible.builtin.file: path: "{{ serveur_backup_racine }}" state: directory owner: "{{ serveur_backup_utilisateur }}" group: "{{ serveur_backup_utilisateur }}" mode: "0700" - name: Autoriser la clé SSH de sauvegarde ansible.posix.authorized_key: user: "{{ serveur_backup_utilisateur }}" key: "{{ serveur_backup_pubkey }}" state: present # --- Vérification des dépôts et rapport passif vers Icinga --- # La liste des détenteurs d'état appartient à `client_backup`. On la LIT chez lui : deux # listes finissent toujours par diverger, et la divergence se lirait « tout va bien ». - name: Lire la liste des détenteurs d'état chez client_backup ansible.builtin.include_vars: file: "{{ role_path }}/../client_backup/vars/main.yml" name: _catalogue_sauvegarde - name: Adopter la liste des détenteurs d'état ansible.builtin.set_fact: client_backup_groupes_etat: "{{ _catalogue_sauvegarde.client_backup_groupes_etat }}" - name: Exiger de quoi rapporter à Icinga (Vault + hôte de supervision) ansible.builtin.assert: that: - serveur_backup_icinga_motdepasse | length > 0 - serveur_backup_icinga_hote | length > 0 - serveur_backup_noeuds_attendus | length > 0 fail_msg: >- vault_icinga_api_depot requis, un hôte du groupe `serveur_icinga` doit exister, et au moins un nœud doit détenir de l'état. Sans cela, les sauvegardes ne seraient surveillées par personne — c'est exactement le silence qui a laissé le défaut du 2026-07-03 vivre un mois. - name: Installer curl et le mot de passe restic pour la vérification ansible.builtin.apt: name: [curl, restic] state: present - name: Créer le répertoire des secrets Set-OPS ansible.builtin.file: path: /etc/setops state: directory owner: root group: root mode: "0700" - name: Déposer le mot de passe restic (lecture des dépôts) ansible.builtin.copy: content: "{{ vault_restic_password }}\n" dest: /etc/setops/restic.pass owner: root group: root mode: "0600" no_log: true - name: Déposer le mot de passe d'API Icinga ansible.builtin.copy: content: "{{ serveur_backup_icinga_motdepasse }}" dest: /etc/setops/icinga-api.pass owner: root group: root mode: "0600" no_log: true - name: Déployer le script de vérification ansible.builtin.template: src: verifier-sauvegardes.sh.j2 dest: /usr/local/sbin/setops-verifier-sauvegardes.sh owner: root group: root mode: "0700" - name: Déployer l'unité et le timer de vérification ansible.builtin.template: src: "{{ item.s }}" dest: "/etc/systemd/system/{{ item.d }}" owner: root group: root mode: "0644" loop: - { s: setops-verification.service.j2, d: setops-verification.service } - { s: setops-verification.timer.j2, d: setops-verification.timer } - name: Activer le timer de vérification when: not ansible_check_mode ansible.builtin.systemd: name: setops-verification.timer enabled: true state: started daemon_reload: true