/* * Gere par Set-OPS (role serveur_icinga). Ne pas editer a la main. * * LES SONDES QUE LES ROLES DECLARENT — voir docs/supervision-conception.md. * * Rien ici n'est ecrit a la main : chaque service vient d'un `meta/supervision.yml`, et * s'attache aux hotes qui portent le role qui le declare. Ajouter une sonde a un role la * fait apparaitre ici sans toucher a ce fichier — comme un flux declare devient une * regle nftables. * * CE QUE CA REMPLACE : dix-neuf lignes `surveillance:` en prose dans * `docs/dependances-groupes.yml`, ecrites, versionnees, relues — et qu'aucun mecanisme * n'executait. La carte disait ce qui etait surveille, et personne ne surveillait. * * Les HOTES sont definis dans `setops-hotes.conf` : ici, rien que des services. */ {# * UN SERVICE PASSIF N'EXISTE QUE POUR UN HOTE QUI PEUT POUSSER (2026-09-10). * * Les hyperviseurs ont rejoint `client_metrique` — c'est par ce groupe qu'on leur * DEPLOIE node_exporter. La derivation en tirait donc `asgard!metriques`, et Icinga * refusait la configuration ENTIERE : * * Attribute 'host_name': Object 'asgard' of type 'Host' does not exist. * * Meme en definissant l'hote, le service serait reste UNKNOWN pour toujours : un * hyperviseur ne porte pas `client_sante`, parce que sa route par defaut est gelee et * qu'il ne peut rien pousser (D-57). On le TIRE avec Prometheus. * * L'appartenance a un groupe sert donc DEUX choses qui ne coincident pas toujours : a * qui l'on deploie, et de qui l'on attend un rapport. La seconde se lit sur le porteur * lui-meme — `client_sante` — et nulle part ailleurs. #} {% for role, sondes in (serveur_icinga_sondes | default({})) | dictsort %} {% for hote in ((groups[role] | default([])) | intersect(groups['client_sante'] | default([]))) | sort %} {% for sonde in sondes %} object Service "{{ sonde.nom }}" { host_name = "{{ hote }}" check_command = "setops-passif" enable_active_checks = false enable_passive_checks = true volatile = false max_check_attempts = 1 vars.setops_source = "{{ hote }}" vars.setops_role = "{{ role }}" vars.setops_raison = "{{ (sonde.raison | default('')) | replace('"', "'") | replace('\n', ' ') | trim }}" } {% endfor %} {% endfor %} {% endfor %}