--- # Cible des sauvegardes : héberge les dépôts restic (un sous-dossier par nœud source). # Les clients y accèdent en SFTP/SSH avec la clé de sauvegarde. Chiffrement côté client (restic). serveur_backup_utilisateur: "restic" serveur_backup_racine: "/srv/restic" # Clé PUBLIQUE de sauvegarde autorisée (la privée est dans la voûte, côté client_backup). serveur_backup_pubkey: "" # --- Vérification des dépôts et rapport passif vers Icinga --- # Le dépôt est le SEUL à voir ce qui est réellement arrivé. Un nœud sait qu'il a lancé sa # sauvegarde ; il ne sait pas qu'elle a abouti. D'où la vérification ici, et pas là-bas. # Toutes les 4 h, pas une fois par jour : la vérification doit renouveler le `ttl` bien # avant qu'il n'expire, sinon un simple retard du timer se lirait comme une sauvegarde # perdue. Elle est peu coûteuse (lecture des métadonnées restic). serveur_backup_verification_horaire: "*-*-* 00/4:00:00" # Seuils d'âge. Le critère « n'emporte rien » ne se règle pas ici : il se mesure en # NOMBRE DE FICHIERS dans l'instantané (zéro = rien emporté), ce qui est exact, alors # qu'un seuil en octets signalait à tort un export LDIF de 2,3 Ko. serveur_backup_age_warn_h: 26 serveur_backup_age_crit_h: 50 # `ttl` du résultat passif : au-delà, Icinga périme le service de lui-même — c'est ce qui # fait que le SILENCE alerte. 6 h pour une vérification toutes les 4 h : une exécution peut # être manquée sans fausse alerte, deux ne le peuvent pas. serveur_backup_ttl_icinga: 21600 # Compte d'API Icinga (portée : uniquement process-check-result sur « sauvegarde: * »). serveur_backup_icinga_utilisateur: "setops-depot" serveur_backup_icinga_motdepasse: "{{ vault_icinga_api_depot | default('') }}" serveur_backup_icinga_hote: "{{ (groups['serveur_icinga'] | default([]) | first) | default('') }}" # Nœuds dont un instantané est ATTENDU : ceux qui portent client_backup ET détiennent # réellement de l'état. Même règle que `client_backup_jobs`, même source que P36. serveur_backup_noeuds_attendus: >- {{ (client_backup_groupes_etat | default([]) | map('extract', groups) | select('defined') | flatten | unique | list) | intersect(groups['client_backup'] | default([])) }}