- metier: sur chaque sonde (47) ; catalogue des vues et services dans serveur_icingaweb2 ; vues Mes outils / Services rendus / Exploitation - contrôles calculés comme serveur_icinga (sauvegardes, socle, matériel, frontière) ; vue vide non posée ; ancien exemple supervision retiré - CHANGELOG 71 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
53 lines
3.3 KiB
Django/Jinja
53 lines
3.3 KiB
Django/Jinja
{#- LES CONTROLES DE CHAQUE SERVICE METIER (2026-10-04) — rendu en JSON, lu par les taches.
|
|
|
|
Meme derivation que `serveur_icinga/templates/setops-sondes.conf.j2`, a la ligne pres :
|
|
chaque role, ses hotes (`groups[role]` et `client_sante`), ses sondes, et la condition
|
|
`seulement_si` lue dans l'inventaire ou dans les defauts du role qui la definit. Une vue
|
|
ne doit nommer que des services qu'Icinga a REELLEMENT : un noeud absent s'afficherait
|
|
« manquant », et une vue qui ment est pire qu'une vue absente.
|
|
|
|
Les sauvegardes ne viennent pas des roles mais de `setops-sauvegardes.conf.j2`, et leur
|
|
nom change avec le modele : `sauvegarde: <noeud>` sur le depot local (site), `sauvegarde`
|
|
sur chaque noeud (locataire). On reprend ses deux variables, calculees dans les taches.
|
|
-#}
|
|
{%- set m = namespace(d={}) -%}
|
|
{%- for role, sondes in (serveur_icingaweb2_sondes | default({})) | dictsort -%}
|
|
{%- for hote in ((groups[role] | default([])) | intersect(groups['client_sante'] | default([]))) | sort -%}
|
|
{%- for sonde in sondes if sonde.metier is defined -%}
|
|
{%- set condition = sonde.seulement_si | default('') -%}
|
|
{%- set ns = namespace(ok=true) -%}
|
|
{%- if condition -%}
|
|
{%- set defauts = lookup('file', role_path ~ '/../' ~ (sonde.defini_par | default(role)) ~ '/defaults/main.yml') | from_yaml -%}
|
|
{#- LE MEME TEST QU'ICINGA, pas `| bool` : une valeur comme « frontiere » est vraie
|
|
pour lui (non vide) et fausse pour `bool` — la sonde existait, la vue l'omettait. -#}
|
|
{%- set ns.ok = (hostvars[hote][condition] if hostvars[hote][condition] is defined else defauts.get(condition)) and true -%}
|
|
{%- endif -%}
|
|
{%- if ns.ok -%}
|
|
{%- set _ = m.d.setdefault(sonde.metier, []).append([hote, sonde.nom]) -%}
|
|
{%- endif -%}
|
|
{%- endfor -%}
|
|
{%- endfor -%}
|
|
{%- endfor -%}
|
|
{%- for noeud in serveur_icingaweb2_bpm_sauvegarde_attendue | sort -%}
|
|
{#- `sauvegarde` existe TOUJOURS sur le noeud ; `sauvegarde: <noeud>` S'Y AJOUTE sur le
|
|
depot quand l'ecosysteme en a un (le site) — les deux, pas l'un ou l'autre. -#}
|
|
{%- if serveur_icingaweb2_bpm_hote_sauvegarde -%}
|
|
{%- set _ = m.d.setdefault("donnees", []).append([serveur_icingaweb2_bpm_hote_sauvegarde, "sauvegarde: " ~ noeud]) -%}
|
|
{%- endif -%}
|
|
{%- set _ = m.d.setdefault("donnees", []).append([noeud, "sauvegarde"]) -%}
|
|
{%- set _ = m.d.setdefault("donnees", []).append([noeud, "restauration"]) -%}
|
|
{%- endfor -%}
|
|
{#- LE SOCLE COMPLET DE CHAQUE MACHINE : `sante` (unites en echec, `setops-sante.conf.j2`,
|
|
sur tout le socle `serveur_debian`) et `ping4` (chaque hote supervise) ne viennent pas des
|
|
roles ; au site, le `materiel` des hyperviseurs et de la frontiere (`setops_materiel_hotes`). -#}
|
|
{%- for noeud in groups['serveur_debian'] | default([]) | sort -%}
|
|
{%- set _ = m.d.setdefault("socle", []).extend([[noeud, "sante"], [noeud, "ping4"]]) -%}
|
|
{%- endfor -%}
|
|
{%- for h in setops_materiel_hotes | default([]) -%}
|
|
{%- set _ = m.d.setdefault("socle", []).extend([[h.nom, "materiel"], [h.nom, "ping4"]]) -%}
|
|
{%- endfor -%}
|
|
{#- LES PATTES DE LA FRONTIERE (site) : une par zone, que Icinga joint par `ping4`. -#}
|
|
{%- for f in serveur_icinga_fabric | default([]) -%}
|
|
{%- set _ = m.d.setdefault("frontiere", []).append([f.nom, "ping4"]) -%}
|
|
{%- endfor -%}
|
|
{{ m.d | to_json }}
|