--- - name: vérifier la présence du fichier webhook (jamais son contenu) ansible.builtin.stat: path: "{{ supervision_fichier_webhook }}" register: supervision_webhook_stat - name: échouer clairement si le webhook est absent ansible.builtin.fail: msg: > {{ supervision_fichier_webhook }} est absent. Adam doit le déposer lui-même (chmod 600) avant de continuer : c'est un secret, Claude ne le demande jamais en clair. when: not supervision_webhook_stat.stat.exists - name: vérifier les permissions du fichier webhook ansible.builtin.fail: msg: "{{ supervision_fichier_webhook }} ne devrait pas être lisible par d'autres utilisateurs (mode actuel {{ supervision_webhook_stat.stat.mode }})." when: - supervision_webhook_stat.stat.exists - supervision_webhook_stat.stat.mode != '0600' - name: créer le dossier des métriques textfile (node_exporter) ansible.builtin.file: path: "{{ supervision_dossier_textfile }}" state: directory owner: root group: root mode: "0755" - name: créer le dossier de configuration Prometheus personnalisée ansible.builtin.file: path: /etc/kolla/config/prometheus state: directory owner: root group: root mode: "0750" - name: déployer les règles d'alerte Prometheus ansible.builtin.copy: src: "{{ playbook_dir }}/../kolla/config/prometheus/alertes.rules" dest: /etc/kolla/config/prometheus/alertes.rules owner: root group: root mode: "0640" register: supervision_regles_alerte - name: déployer la configuration Alertmanager ansible.builtin.copy: src: "{{ playbook_dir }}/../kolla/config/prometheus/prometheus-alertmanager.yml" dest: /etc/kolla/config/prometheus/prometheus-alertmanager.yml owner: root group: root mode: "0640" register: supervision_config_alertmanager - name: déployer le relais Alertmanager -> ntfy ansible.builtin.template: src: alertmanager-ntfy.py.j2 dest: /usr/local/sbin/alertmanager-ntfy.py owner: root group: root mode: "0700" notify: redémarrer le relais alertmanager-ntfy - name: déployer le service systemd du relais ansible.builtin.template: src: alertmanager-ntfy.service.j2 dest: /etc/systemd/system/alertmanager-ntfy.service mode: "0644" notify: - recharger systemd - redémarrer le relais alertmanager-ntfy - name: appliquer les changements du relais ansible.builtin.meta: flush_handlers - name: vérifier que le relais tourne ansible.builtin.systemd: name: alertmanager-ntfy state: started enabled: true # Réseau de l'hôte, écoute forcée sur 127.0.0.1 : Docker tourne avec # "bridge": "none" et "iptables": false (étape 5), donc un `ports:` sur le # pont par défaut n'est jamais publié (constaté le 2026-10-09 : rien sur # 3001). En mode hôte, rien à publier, et Kuma joint directement les # services locaux qu'il surveille. - name: déployer Uptime Kuma community.docker.docker_container: name: uptime-kuma image: louislam/uptime-kuma:1 state: started restart_policy: unless-stopped network_mode: host env: UPTIME_KUMA_HOST: "127.0.0.1" UPTIME_KUMA_PORT: "{{ supervision_port_uptime_kuma | string }}" volumes: - uptime-kuma-data:/app/data - name: vérifier qu'Uptime Kuma écoute sur 127.0.0.1 uniquement ansible.builtin.wait_for: host: 127.0.0.1 port: "{{ supervision_port_uptime_kuma }}" timeout: 60 - name: refuser toute écoute d'Uptime Kuma hors de 127.0.0.1 ansible.builtin.shell: cmd: "ss -Htln 'sport = :{{ supervision_port_uptime_kuma }}' | awk '{print $4}'" register: supervision_ecoute_kuma changed_when: false failed_when: >- supervision_ecoute_kuma.stdout_lines | length == 0 or supervision_ecoute_kuma.stdout_lines | reject('equalto', '127.0.0.1:' ~ supervision_port_uptime_kuma) | list | length > 0 - name: afficher s'il faut relancer Kolla pour les nouvelles règles ansible.builtin.debug: msg: > Config Prometheus/Alertmanager modifiée : lancer `kolla-ansible reconfigure -i /etc/kolla/all-in-one --tags prometheus` sur le serveur (voir docs/runbooks/supervision.md). when: supervision_regles_alerte.changed or supervision_config_alertmanager.changed