#!/bin/bash # ============================================================================================== # ============================= Conf Cache Watchdog ============================================ # ============================================================================================== # # PURPOSE # ───────────────────────────────────────────────────────────────────────────── # Maintains the persistent partner conf backup at /boot/config/.cache/vv/d/. # Runs every 15 minutes via SYSTEM_WATCHDOG_SCRIPTS. # # When remote is OFFLINE: # Writes/refreshes partner confs from RAM cache → persistent location. # Means if this host reboots while remote is still down, conf_cache_restore.sh # can load the partner vars into RAM so fallback.sh has what it needs. # # When remote is ONLINE: # Removes the persistent backup if present — not needed, conf_sync.sh will # pull fresh on next boot. # # Silent when remote is online and no backup exists (normal state). # No-op when FALLBACK_ENABLED=false or CONF_SYNC_ENABLED=false. # ============================================================================================== SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "$SCRIPT_DIR/../../load_config.sh" parse_args "$@" detect_hosts [[ "${FALLBACK_ENABLED:-false}" != "true" ]] && exit 0 [[ "${CONF_SYNC_ENABLED:-true}" != "true" ]] && exit 0 [[ -z "${REMOTE_ID:-}" ]] && exit 0 RAM_CACHE="/tmp/.cache/vv/d" SAVE_DIR="/boot/config/.cache/vv/d" if ping_remote; then if [[ -d "$SAVE_DIR" ]]; then [[ "$DRY_RUN" == true ]] && warn "DRY RUN — would remove $SAVE_DIR (remote back online)" && exit 0 rm -rf "$SAVE_DIR" log "Remote online — persistent conf backup removed" fi exit 0 fi # Remote offline — write/refresh backup from RAM cache if [[ ! -d "$RAM_CACHE" ]]; then log "Remote offline but RAM cache not populated — nothing to back up" exit 0 fi saved=0 for conf in "$RAM_CACHE"/host*.conf; do [[ -f "$conf" ]] || continue base="$(basename "$conf")" [[ "${base,,}" == "${MY_ID,,}.conf" ]] && continue if [[ "$DRY_RUN" == true ]]; then warn "DRY RUN — would write $base → $SAVE_DIR/" (( saved++ )) continue fi mkdir -p "$SAVE_DIR" cp "$conf" "$SAVE_DIR/$base" && (( saved++ )) done [[ "$saved" -gt 0 ]] && log "Remote offline — partner conf backup refreshed ($saved file(s))" exit 0