Set-OPS-Public/roles/serveur_icingaweb2/templates/bpm-membres.json.j2
Daniel Allaire 5340220192 vigie : vues métier par clientèle interne, dérivées du plan
- 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>
2026-10-04 02:26:11 -04:00

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 }}