Set-OPS-Public/roles/serveur_backup/templates/sonde-depot.sh.j2

51 lines
2.6 KiB
Text
Raw Normal View History

#!/bin/bash
# GENERE par Set-OPS (role serveur_backup). Ne pas editer a la main.
#
# SONDE « depot » — le depot accepte-t-il encore qu'on y depose ?
#
# Contrat : docs/supervision-conception.md (API des greffons Nagios) — une ligne, 0/1/2.
# Mise en defaut PAR PARAMETRE : `serveur_backup_sonde_racine` (chemin non inscriptible).
#
# CE QU'ELLE NE MESURE PAS, ET C'EST LA DOCTRINE LA PLUS STRICTE DE CE DEPOT.
#
# Elle ne juge RIEN du contenu. Les instantanes sont chiffres cote client : ce serveur
# heberge des octets qu'il ne peut pas ouvrir, donc qu'il ne peut pas juger. « Cet
# instantane est-il recent, complet, restaurable ? » se demande a qui detient la cle, et
# `client_backup` le fait deja depuis chaque noeud. LA VERIFICATION SUIT LA CLE.
#
# CE QU'ELLE MESURE, ET QUE PERSONNE D'AUTRE NE VOIT A TEMPS : que l'endroit accepte une
# ECRITURE. Un systeme de fichiers remonte en lecture seule apres une erreur disque, un
# volume plein, des droits qui ont derive — dans les trois cas le depot refuse tout, et
# les clients ne l'apprennent qu'a leur prochaine execution, chacun de son cote.
#
# NEUF ROUGES EPARS NE DESIGNENT PAS UNE CAUSE COMMUNE. C'est la seule raison d'etre de
# cette sonde : dire UNE fois, ici, ce que neuf machines diront plus tard sans savoir
# qu'elles disent la meme chose.
#
# ON ECRIT VRAIMENT, ET SOUS L'IDENTITE QUI DEPOSE. Un `test -w` ment sur un montage en
# lecture seule et sur un quota atteint. Seule une ecriture reelle, faite par le compte
# que les clients empruntent, prouve que le depot prend encore.
set -uo pipefail
RACINE={{ serveur_backup_sonde_racine }}
UTIL={{ serveur_backup_utilisateur }}
[[ -d "${RACINE}" ]] || { echo "Le depot ${RACINE} n'existe pas."; exit 2; }
temoin="${RACINE}/.setops-temoin-sonde"
if ! sudo -u "${UTIL}" install -m 0600 /dev/null "${temoin}" 2>/dev/null; then
echo "Le depot ${RACINE} refuse l'ecriture pour ${UTIL} — plein, en lecture seule, ou droits derives."
exit 2
fi
sudo -u "${UTIL}" rm -f "${temoin}" 2>/dev/null
# CE CHIFFRE EST UN CONSTAT, PAS UN SEUIL. L'occupation appartient a Prometheus ; on la
# publie ici en donnee de performance pour que le graphe existe, sans jamais en faire un
# verdict. Icinga repond a une seule question — est-ce casse ?
lisible=$(df -h --output=avail "${RACINE}" 2>/dev/null | tail -1 | tr -d ' ')
octets=$(df -B1 --output=avail "${RACINE}" 2>/dev/null | tail -1 | tr -d ' ')
depots=$(sudo -u "${UTIL}" find "${RACINE}" -maxdepth 1 -mindepth 1 -type d 2>/dev/null | wc -l)
echo "Le depot accepte l'ecriture — ${depots} depot(s) heberge(s), ${lisible} libres.|libre=${octets:-0}B depots=${depots}"
exit 0