Set-OPS-Public/roles/serveur_cache_site/templates/sonde-cache-site-racine.sh.j2
Daniel Allaire aac74f6043 supervision : les huit derniers roles, et deux defauts que l epreuve a trouves
Les 33 roles serveur_* declarent maintenant une sonde. Les huit qui manquaient
sont ceux dont la verite ne ressemble pas a « ce service repond-il ».

Quatre marqueurs du site : ce que tasks/main.yml verifie UNE FOIS au deploiement
cesse d etre vrai sans que rien ne tombe. La racine du cache se retrouve chainee,
la forge du genome repond en n ayant plus rien dedans, un locataire n est plus
admis a resoudre, l isolation d un depot glisse.

serveur_ops_site ne sert rien : il detient un pouvoir. La sonde verifie que la
carte est la, que la voute du site est chiffree et que sa cle est en 0600 — sans
lire le contenu d aucun des trois.

serveur_icingaweb2 surveille la vitrine de la supervision elle-meme : si la
console meurt, tout reste vert et l exploitant est aveugle.

DEFAUT 1 — quatre gabarits qu Ansible aurait refuse de rendre. Jinja lit le
{# de ${#tableau[@]} comme un debut de commentaire. Le depot connaissait le
remede et l appliquait la ou quelqu un s etait fait prendre, nulle part ailleurs.
P76 rend desormais chaque gabarit de role, avec les delimiteurs qu Ansible en
tirerait — pas une recherche de motif.

DEFAUT 2 — la doctrine promettait 54 greffons et citait check_pgsql. La flotte a
monitoring-plugins-basic : 53, sans check_pgsql ni check_dns ni check_ldap. Le
paquet qui les porte traine samba et snmp sur chaque machine. Un greffon absent
sort en 127, qui n est pas un code Nagios.

21 controles negatifs sur les machines reelles du site. ansible-lint production
0/91, harnais 75 OK.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-14 15:43:52 -04:00

55 lines
2.5 KiB
Django/Jinja

#!/bin/bash
# GENERE par Set-OPS (role serveur_cache_site). Ne pas editer a la main.
#
# SONDE « cache-site-racine » — ce cache est-il toujours la racine, et remplit-il ?
#
# PAS UNE ENVELOPPE DE GREFFON, ET C'EST ASSUME. `check_http` sait dire « ce service
# repond » — c'est deja la sonde `cache-apt` de `serveur_artefacts`. La verite d'ici est
# propre a Set-OPS : « ce cache-la est la RACINE de la chaine du site ». Aucun greffon
# standard ne connait cette notion.
#
# DEUX CONTROLES, DEUX ECHECS DISTINCTS.
set -uo pipefail
PORT={{ serveur_artefacts_port | default(3142) }}
INDEX='{{ serveur_cache_site_sonde_index }}'
CONF={{ serveur_cache_site_sonde_config }}
# 1. LA RACINE N'A PAS D'AMONT. `tasks/main.yml` l'exige au deploiement et personne ne le
# revoit ensuite. Un `Proxy:` ajoute a la main referme la chaine sur elle-meme, et le
# cache continue de servir ce qu'il a — donc rien ne casse avant le premier paquet
# qu'il n'a pas.
amont=$(grep -rhiE '^[[:space:]]*Proxy:[[:space:]]*\S' "${CONF}" 2>/dev/null | head -1)
if [[ -n "${amont}" ]]; then
echo "Ce cache est declare cache du SITE, mais il a un amont : ${amont}. La chaine se referme sur elle-meme."
exit 2
fi
# 2. LA RACINE REMPLIT ENCORE. On demande au cache un index amont REEL a travers son
# mode passe-plat.
#
# CE QUE CE CONTROLE PROUVE, ET CE QU'IL NE PROUVE PAS — a lire avant de s'y fier.
# Un 200 peut venir du cache lui-meme : apt-cacher-ng sert ce qu'il a deja, et refuse
# qu'on le force a revalider (mesure du 2026-09-14 : une chaine de contournement en
# parametre est rejetee en 403, `Cache-Control: no-cache` est ignore).
#
# CE QU'IL ECARTE VRAIMENT, c'est le 503 — celui que rend un amont injoignable, une
# resolution morte ou un `Remap` casse. C'est exactement la panne du 2026-08-28, ou
# `ops-01` atteignait le cache et restait bloquee sur ce qu'il devait aller chercher.
# Un temoin dit ce qui est PARTI, jamais ce qui est ARRIVE : celui-ci dit que la porte
# de sortie existe encore, pas que Debian a repondu a l'instant.
code=$(curl -s -o /dev/null -w '%{http_code}' --max-time 20 "http://127.0.0.1:${PORT}${INDEX}" 2>/dev/null)
case "${code}" in
200)
echo "Cache du site : racine sans amont, et l'index ${INDEX} se sert (HTTP 200)."
exit 0
;;
5*)
echo "La racine ne remplit plus : ${INDEX} rend HTTP ${code}. Le premier apt update d'un ecosysteme neuf echouera."
exit 2
;;
*)
echo "Reponse inattendue du cache pour ${INDEX} : HTTP ${code:-aucune}."
exit 1
;;
esac