{#- 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: ` 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: ` 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 }}