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
55 lines
2.5 KiB
Django/Jinja
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
|