Paillasse/ansible/roles/supervision/tasks/main.yml

126 lines
4.4 KiB
YAML
Raw Normal View History

---
- 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
# www-data (bloc A, self-healing) y écrit aussi : SurveillanceVm tourne
# dans le scheduler Laravel, sous ce compte. node_exporter se contente
# de lire, quel que soit le propriétaire de chaque fichier.
group: www-data
mode: "0775"
- 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