--- # LE NOEUD RAPPORTE SES UNITES EN ECHEC. Voir le gabarit du script pour le pourquoi. # # Conditionne a l'existence d'un `serveur_icinga` : sans destinataire, le rapport # n'irait nulle part, et un timer qui echoue chaque quart d'heure apprend a ignorer # le rouge. Meme regle que `client_backup`. - name: Aucune supervision dans cet écosystème — rien à poser ansible.builtin.debug: msg: >- Aucun hôte `serveur_icinga` : le rapport de santé n'est pas posé. Ce n'est pas une erreur — c'est un écosystème sans supervision, et le dire vaut mieux que d'installer un minuteur qui échouerait dans le vide. when: not client_sante_icinga_hote - name: Poser le rapport de santé when: client_sante_icinga_hote | length > 0 block: - name: Exiger de quoi rapporter à Icinga ansible.builtin.assert: that: - client_sante_icinga_motdepasse | length > 0 fail_msg: >- `vault_icinga_api_depot` requis : un hôte `serveur_icinga` existe, mais aucun secret d'API. Le nœud verrait ses unités en échec sans pouvoir le dire. - name: Assurer le répertoire des secrets Set-OPS ansible.builtin.file: path: /etc/setops state: directory owner: root group: root mode: "0755" - name: Déposer le mot de passe d'API Icinga ansible.builtin.copy: content: "{{ client_sante_icinga_motdepasse }}\n" dest: /etc/setops/icinga-api.pass owner: root group: root mode: "0600" no_log: true # L'AC d'ICINGA, PAS CELLE DE step-ca : Icinga refuse de servir un certificat qu'il # n'a pas emis (il renouvelle tout ce qui expire sous 30 jours, nos certificats vivent # 24 h). Domaine de confiance ferme, pair authentifie malgre tout. - name: L'AC d'Icinga est-elle déjà disponible ? ansible.builtin.stat: path: "{{ client_sante_icinga_ca_source }}" delegate_to: "{{ client_sante_icinga_hote }}" register: client_sante_ca_presente - name: Récupérer l'AC d'Icinga depuis l'hôte de supervision when: client_sante_ca_presente.stat.exists ansible.builtin.slurp: src: "{{ client_sante_icinga_ca_source }}" delegate_to: "{{ client_sante_icinga_hote }}" register: client_sante_ca_icinga - name: Déposer l'AC d'Icinga pour la vérification du pair when: client_sante_ca_presente.stat.exists ansible.builtin.copy: content: "{{ client_sante_ca_icinga.content | b64decode }}" dest: "{{ client_sante_ca_verification }}" owner: root group: root mode: "0644" - name: Installer curl pour le rapport passif ansible.builtin.apt: name: curl state: present - name: Déployer le script de rapport de santé ansible.builtin.template: src: setops-sante.sh.j2 dest: /usr/local/sbin/setops-sante.sh owner: root group: root mode: "0750" - name: Déployer l'unité systemd du rapport ansible.builtin.template: src: setops-sante.service.j2 dest: /etc/systemd/system/setops-sante.service owner: root group: root mode: "0644" notify: Recharger systemd - name: Déployer le minuteur du rapport ansible.builtin.template: src: setops-sante.timer.j2 dest: /etc/systemd/system/setops-sante.timer owner: root group: root mode: "0644" notify: Recharger systemd - name: Activer le rapport de santé ansible.builtin.systemd: name: setops-sante.timer enabled: true state: started daemon_reload: true # PREMIER RAPPORT IMMEDIAT, et ce n'est pas une commodite : sans lui, le service # reste « en attente » jusqu'au premier declenchement, et un deploiement qui vient # d'installer la supervision laisserait un tableau vide qu'on prendrait pour un # tableau sain. - name: Rapporter tout de suite (ne pas laisser un tableau vide passer pour sain) ansible.builtin.command: /usr/local/sbin/setops-sante.sh changed_when: false failed_when: false