diff --git a/roles/serveur_icinga/defaults/main.yml b/roles/serveur_icinga/defaults/main.yml index 380e3b7..fdf33f0 100644 --- a/roles/serveur_icinga/defaults/main.yml +++ b/roles/serveur_icinga/defaults/main.yml @@ -70,3 +70,14 @@ serveur_icinga_sauvegarde_attendue: >- {{ (client_backup_groupes_etat | default([]) | map('extract', groups) | select('defined') | flatten | unique | list) | intersect(groups['client_backup'] | default([])) }} + +# A QUI LA SUPERVISION PARLE — vide = personne, et on le DIT. +# +# Icinga livre son exemple avec `root@localhost`. Une supervision qui voit tout et +# n'en parle a personne a le meme effet qu'une supervision absente, en plus couteux : +# elle rassure. Renseigne, ce champ cree un destinataire dans le groupe auquel les +# notifications sont deja assignees. +# +# Vide, aucun destinataire n'est pose et le deploiement le SIGNALE — plutot que de +# laisser croire qu'une alerte partira. +serveur_icinga_destinataire: "" diff --git a/roles/serveur_icinga/tasks/main.yml b/roles/serveur_icinga/tasks/main.yml index a2da2f2..8d811c6 100644 --- a/roles/serveur_icinga/tasks/main.yml +++ b/roles/serveur_icinga/tasks/main.yml @@ -199,3 +199,24 @@ group: root mode: "0644" delegate_to: "{{ groups['serveur_backup'] | first }}" + +# --- A QUI PARLER ------------------------------------------------------------- +- name: Déclarer le destinataire des alertes + ansible.builtin.template: + src: setops-users.conf.j2 + dest: /etc/icinga2/conf.d/setops-users.conf + owner: root + group: nagios + mode: "0640" + when: serveur_icinga_destinataire | length > 0 + notify: Redemarrer icinga2 + +# DIRE CE QU'ON NE FAIT PAS. Sans destinataire, Icinga notifie `root@localhost` — une +# adresse que personne ne lit. Le silence alerterait alors dans le vide. +- name: Dire que personne ne recevra les alertes + ansible.builtin.debug: + msg: >- + `serveur_icinga_destinataire` n'est pas renseigne : les notifications iront a + `root@localhost`, que personne ne lit. La supervision VERRA les defauts sans + pouvoir les dire. Declarer l'adresse au plan. + when: serveur_icinga_destinataire | length == 0 diff --git a/roles/serveur_icinga/templates/setops-users.conf.j2 b/roles/serveur_icinga/templates/setops-users.conf.j2 new file mode 100644 index 0000000..6354679 --- /dev/null +++ b/roles/serveur_icinga/templates/setops-users.conf.j2 @@ -0,0 +1,20 @@ +/* + * Gere par Set-OPS (role serveur_icinga). Ne pas editer a la main. + * + * A QUI LA SUPERVISION PARLE. + * + * Icinga livre `users.conf` avec `email = "root@localhost"` — une adresse qui n'existe + * nulle part et que personne ne lit. Une supervision qui voit tout et le dit a personne + * a le meme effet qu'une supervision absente, en plus couteux : elle rassure. + * + * Ce fichier REMPLACE l'utilisateur d'exemple par celui du plan. Il trie apres + * `users.conf` — mais Icinga refuse deux objets de meme nom, on ne peut donc pas le + * redefinir : on en declare un AUTRE, et on l'ajoute au groupe auquel les notifications + * sont deja assignees. L'exemple reste, muet ; le notre recoit. + */ +object User "setops-exploitant" { + import "generic-user" + display_name = "Exploitant Set-OPS" + groups = [ "icingaadmins" ] + email = "{{ serveur_icinga_destinataire }}" +} diff --git a/scripts/site_inventaire.py b/scripts/site_inventaire.py index 7768234..df7952e 100755 --- a/scripts/site_inventaire.py +++ b/scripts/site_inventaire.py @@ -403,6 +403,8 @@ def inventaire() -> dict: # depend de l'ordre des plays est un reglage qui reviendra en arriere. # # Ici, tout play qui applique `ssh_hardening` a cet hote la voit. + # A qui la supervision parle. Vide, le role le SIGNALE au deploiement. + "serveur_icinga_destinataire": str(intrants.get("supervision_courriel") or ""), # LE POSTFIX DU SITE EXPEDIE, IL NE RECOIT PAS. # # `serveur_postfix` est d'abord le serveur de courriel d'un ecosysteme : il