Les instantanes sont chiffres cote client : ce serveur heberge des octets qu il ne peut pas ouvrir, donc pas juger. La verification suit la cle, et client_backup la fait deja depuis chaque noeud. Ce que la sonde ajoute : elle voit TOUT DE SUITE, et depuis la cause, ce que les clients ne decouvriront qu a leur prochaine execution. Lecture seule apres une erreur disque, volume plein, droits derives — le depot refuse alors tout le monde, et neuf rouges epars ne designent pas une cause commune. Elle ECRIT vraiment, sous l identite qui depose. Un test -w ment sur un montage en lecture seule et sur un quota atteint. Corrige aussi l en-tete de setops-sauvegardes.conf.j2, qui nommait encore backup-01 comme pousseur — retire le 2026-09-02, et c est tout le sujet. Le code avait suivi la decision, l en-tete non. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
73 lines
3.2 KiB
Django/Jinja
73 lines
3.2 KiB
Django/Jinja
/*
|
|
* Gere par Set-OPS (role serveur_icinga). Ne pas editer a la main.
|
|
*
|
|
* Supervision des sauvegardes. Le controle ne porte PAS sur l'unite systemd du noeud
|
|
* source : une unite verte sur un depot vide est exactement ce qui a menti pendant un
|
|
* mois (2026-07-03 -> 2026-08-11). Il porte sur la VERITE DE TERRAIN, cote depot :
|
|
* l'instantane du noeud existe-t-il, est-il RECENT, et n'est-il pas VIDE.
|
|
*
|
|
* Les HOTES sont definis ailleurs (`setops-hotes.conf`) depuis le 2026-09-09 : deux
|
|
* fichiers qui definissent le meme `object Host` font rejeter TOUTE la configuration.
|
|
* Ce fichier n'attache que des services.
|
|
*
|
|
* QUI POUSSE : CHAQUE NOEUD, POUR SON PROPRE DEPOT. Cette ligne a dit le contraire
|
|
* jusqu'au 2026-09-14 — elle nommait `backup-01`, « le seul a pouvoir lire ses depots ».
|
|
* Or `backup-01` a ete RETIRE le 2026-09-02, et c'est tout le sujet : le site heberge des
|
|
* octets chiffres cote client, il ne peut pas les ouvrir, donc pas les juger.
|
|
*
|
|
* LA VERIFICATION SUIT LA CLE. Chaque noeud verifie SON depot distant et rapporte
|
|
* lui-meme, par `client_backup` et son minuteur. Le code de ce fichier avait suivi la
|
|
* decision — il attache les services aux vrais noeuds — mais l'en-tete decrivait encore
|
|
* un acteur disparu, a celui-la meme qui l'ouvrirait pour comprendre qui pousse.
|
|
* Le `ttl` porte dans chaque envoi fait la fraicheur : sans nouvelle, Icinga bascule tout
|
|
* seul en « expire ». C'est le SILENCE qui doit alerter, pas seulement l'echec — le
|
|
* silence est precisement ce qui n'a alerte personne.
|
|
*/
|
|
|
|
object CheckCommand "setops-passif" {
|
|
// Les resultats arrivent par l'API ; cette commande n'est jamais executee.
|
|
command = [ "/bin/true" ]
|
|
}
|
|
|
|
{% if serveur_icinga_hote_sauvegarde %}
|
|
{#
|
|
L'ECOSYSTEME A SON PROPRE DEPOT : c'est LUI qui rapporte, parce qu'il est le seul a
|
|
voir ce qui est reellement arrive. Les services s'attachent donc a son hote.
|
|
#}
|
|
{% for noeud in serveur_icinga_sauvegarde_attendue | sort %}
|
|
object Service "sauvegarde: {{ noeud }}" {
|
|
host_name = "{{ serveur_icinga_hote_sauvegarde }}"
|
|
check_command = "setops-passif"
|
|
enable_active_checks = false
|
|
enable_passive_checks = true
|
|
volatile = false
|
|
max_check_attempts = 1
|
|
vars.setops_source = "{{ noeud }}"
|
|
}
|
|
{% endfor %}
|
|
{% else %}
|
|
{#
|
|
AUCUN DEPOT DANS CET ECOSYSTEME — le cas normal depuis qu'ils deposent chez leur
|
|
HEBERGEUR (2026-09-02).
|
|
|
|
Le site heberge des octets chiffres COTE CLIENT : il ne peut ni les lire, ni dire
|
|
s'ils valent quelque chose. La verification revient donc au seul qui detient la cle,
|
|
le NOEUD lui-meme — et le service s'attache a lui, ce qui est d'ailleurs plus juste :
|
|
la sauvegarde de `idm-01` est un attribut de `idm-01`, pas d'une machine tierce.
|
|
|
|
Le service n'est plus nomme « sauvegarde: <noeud> » mais simplement « sauvegarde » :
|
|
le nom du noeud est desormais porte par l'hote. Repeter le nom dans le service
|
|
donnerait « idm-01 / sauvegarde: idm-01 ».
|
|
#}
|
|
{% for noeud in serveur_icinga_sauvegarde_attendue | sort %}
|
|
object Service "sauvegarde" {
|
|
host_name = "{{ noeud }}"
|
|
check_command = "setops-passif"
|
|
enable_active_checks = false
|
|
enable_passive_checks = true
|
|
volatile = false
|
|
max_check_attempts = 1
|
|
vars.setops_source = "{{ noeud }}"
|
|
}
|
|
{% endfor %}
|
|
{% endif %}
|