Set-OPS-Public/roles/serveur_ops_site/templates/sonde-fabric.sh.j2
Daniel Allaire 79fcff3274 sonde fabric : le pare-feu, le SDN, la frontiere et les acces disent-ils le plan ?
Un minuteur horaire sur le runner du site joue les plans de lecture et
consigne l ecart ; la sonde lit le constat, et signale un constat perime.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 16:56:17 -04:00

38 lines
1.8 KiB
Django/Jinja

#!/bin/bash
# GENERE par Set-OPS (role serveur_ops_site). Ne pas editer a la main.
#
# SONDE « fabric » — le pare-feu Proxmox, le SDN, la frontiere et les acces WireGuard
# disent-ils encore ce que le plan dit ?
#
# Contrat : docs/supervision-conception.md — une ligne, 0/1/2/3. Elle ne JOUE pas les
# plans (trop lents pour une sonde) : elle lit le constat du minuteur
# `setops-conformite-fabric`. Un constat trop VIEUX est une panne a part entiere : sans
# lui, un minuteur mort laisserait la derniere bonne nouvelle au vert pour toujours.
set -uo pipefail
python3 - {{ serveur_ops_site_conformite_etat }} {{ serveur_ops_site_conformite_age_max_h }} <<'EOF'
import json, sys, time
etat, age_max = sys.argv[1], int(sys.argv[2])
try:
doc = json.load(open(etat))
except (OSError, ValueError):
print(f"Aucun constat lisible ({etat}) : le minuteur setops-conformite-fabric a-t-il tourne ?")
sys.exit(2)
age_h = (time.time() - doc["horodatage"]) / 3600
if age_h > age_max:
print(f"Constat PERIME : {age_h:.0f} h (seuil {age_max} h). Le minuteur ne mesure plus.")
sys.exit(2)
plans = doc["plans"]
illisibles = [p["plan"] for p in plans if p["rc"] != 0]
ecarts = [p for p in plans if p["rc"] == 0 and p["a_faire"] > 0]
perf = " ".join(f"{p['plan']}={p['a_faire'] if p['rc'] == 0 else -1}" for p in plans)
if illisibles:
print(f"Plan(s) illisible(s) : {', '.join(illisibles)} — la fabric n'a pas pu etre relue. | {perf}")
sys.exit(3)
if ecarts:
quoi = "; ".join(f"{p['plan']} : {p['a_faire']} ({(p['detail'] or ['?'])[0][:60]})" for p in ecarts)
print(f"ECART avec le plan — {quoi}. Relire le plan, puis appliquer ou corriger. | {perf}")
sys.exit(1)
print(f"Fabric conforme au plan ({len(plans)} plans, constat de {age_h * 60:.0f} min). | {perf}")
sys.exit(0)
EOF