#!/usr/bin/env bash # Handle Keepalived state changes # Deploy to /usr/local/bin/keepalived-notify.sh on Proxmox hosts (no project root needed) set -euo pipefail # Default VIP (used when not run from repo) VIP="${VIP:-192.168.11.166}" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" [ -f "${PROJECT_ROOT}/config/ip-addresses.conf" ] && source "${PROJECT_ROOT}/config/ip-addresses.conf" 2>/dev/null || true VIP="${VIP:-${IP_NPMPLUS_ETH0:-192.168.11.166}}" STATE="${1:-unknown}" LOGFILE="/var/log/keepalived-notify.log" TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S') # Ensure log directory exists mkdir -p "$(dirname "$LOGFILE")" case "$STATE" in "master") echo "[$TIMESTAMP] Transitioned to MASTER - This node now owns VIP $VIP" >> "$LOGFILE" # Optionally: Start services, send alerts, etc. # Example: Send alert # echo "NPMplus HA: Node $(hostname) is now MASTER" | mail -s "NPMplus HA Master" admin@example.com ;; "backup") echo "[$TIMESTAMP] Transitioned to BACKUP - Standby mode" >> "$LOGFILE" ;; "fault") echo "[$TIMESTAMP] Transitioned to FAULT - Health check failed" >> "$LOGFILE" # Optionally: Send critical alerts # echo "NPMplus HA: Node $(hostname) is in FAULT state!" | mail -s "NPMplus HA Fault" admin@example.com ;; *) echo "[$TIMESTAMP] Unknown state: $STATE" >> "$LOGFILE" ;; esac