#!/bin/bash # GENERE par Set-OPS (role serveur_powerdns). Ne pas editer a la main. # # SONDE « zones » — l'autoritatif repond et sert ses zones # # Contrat : docs/supervision-conception.md (API des greffons Nagios) — une ligne, 0/1/2. # Mise en defaut PAR PARAMETRE : `serveur_powerdns_sonde_minimum` (seuil impossible). set -uo pipefail MINIMUM={{ serveur_powerdns_sonde_minimum }} TOLERANCE={{ serveur_powerdns_sonde_tolerance }} systemctl is-active --quiet pdns || { echo "L'autoritatif (pdns) n'est pas actif."; exit 2; } [[ "$(pdns_control rping 2>&1 | head -1)" == "PONG" ]] \ || { echo "L'autoritatif ne repond pas a son propre controle."; exit 2; } # LES ZONES, PAS SEULEMENT LE DEMON. Un PowerDNS sans zone repond NXDOMAIN a tout, ce qui # se lit exactement comme « ce nom n'existe pas » — la panne la plus trompeuse du DNS. n=$(pdnsutil list-all-zones 2>/dev/null | grep -vc '^All zonecount') [[ "${n}" =~ ^[0-9]+$ ]] || { echo "Impossible de lister les zones."; exit 2; } if (( n < MINIMUM )); then echo "L'autoritatif ne sert que ${n} zone(s), moins que ${MINIMUM} — la resolution interne repondra NXDOMAIN.|zones=${n};${MINIMUM};;0;" exit 2 fi # LA ZONE SERVIE EST-ELLE CELLE DU DISQUE ? (2026-09-29) Compter les zones ne dit pas # lesquelles sont a jour : chez les deux locataires, PowerDNS a servi pendant treize jours # une zone anterieure a son fichier — `console` y manquait — et cette sonde restait verte. # `bind-domain-status` donne l'heure de chargement ; on la compare a celle du fichier. retard=() for f in {{ serveur_powerdns_zone_directory }}/*.zone; do [[ -e "${f}" ]] || continue z=$(basename "${f}" .zone) charge=$(pdns_control bind-domain-status "${z}" 2>/dev/null | grep -oP 'parsed into memory at \K.*') if [[ -z "${charge}" ]]; then retard+=("${z}=jamais chargee"); continue; fi ecart=$(( $(date -r "${f}" +%s) - $(date -d "${charge}" +%s) )) (( ecart > TOLERANCE )) && retard+=("${z}=fichier plus recent de $(( ecart / 3600 )) h") done if [[ -n "${retard[*]}" ]]; then # (le compteur de tableau de bash ouvrirait un commentaire Jinja) echo "L'autoritatif sert ${n} zone(s), mais PAS celles du disque : ${retard[*]} — les noms ajoutes depuis repondent NXDOMAIN. Redeployer serveur_powerdns.|zones=${n};${MINIMUM};;0;" exit 2 fi echo "Autoritatif : ${n} zone(s) servie(s), chacune conforme a son fichier.|zones=${n};${MINIMUM};;0;"