74 lines
3.6 KiB
Bash
74 lines
3.6 KiB
Bash
#!/bin/bash
|
|
# /usr/local/bin/homelab_power_shutdown.sh
|
|
# Staged graceful homelab shutdown orchestrator for Snarfnet
|
|
set -uo pipefail
|
|
|
|
log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] [POWER-SHUTDOWN] $*" | tee -a /var/log/power-shutdown.log; }
|
|
SSH_OPTS="-o StrictHostKeyChecking=no -o ConnectTimeout=4 -o BatchMode=yes -i /root/.ssh/id_ed25519_snarfnet"
|
|
|
|
log "=== INITIATING HOMELAB TIERED SHUTDOWN ==="
|
|
|
|
# ------------------------------------------------------------------
|
|
# TIER 1: Non-Essential Compute & AI Pis
|
|
# ------------------------------------------------------------------
|
|
log "Tier 1: Halting AI Raspberry Pi stack (140.44.4.7, 140.44.4.8)..."
|
|
ssh $SSH_OPTS root@140.44.4.7 "shutdown -h now" 2>/dev/null || true
|
|
ssh $SSH_OPTS root@140.44.4.8 "shutdown -h now" 2>/dev/null || true
|
|
|
|
# ------------------------------------------------------------------
|
|
# TIER 2: Docker Swarm NFS Workloads (NPM, Peanut, Homebox)
|
|
# ------------------------------------------------------------------
|
|
log "Tier 2: Stopping Swarm services mounting Synology NFS..."
|
|
ssh $SSH_OPTS root@140.44.4.71 "docker service scale nginx-proxy-manager_app=0 nginx-proxy-manager_backup=0 peanut_peanut=0 homebox_homebox=0" 2>/dev/null || true
|
|
sleep 5
|
|
|
|
# ------------------------------------------------------------------
|
|
# TIER 3: Kubernetes Worker Nodes (Aerodrome & Spaceport)
|
|
# ------------------------------------------------------------------
|
|
log "Tier 3: Gracefully stopping K3s agent and halting worker nodes..."
|
|
# Aerodrome Workers (wrk01 - wrk07)
|
|
for ip in 140.44.4.21 140.44.4.22 140.44.4.23 140.44.4.24 140.44.4.25 140.44.4.26 140.44.4.27; do
|
|
ssh $SSH_OPTS root@$ip "systemctl stop k3s-agent && sync && shutdown -h now" 2>/dev/null || true
|
|
done
|
|
|
|
# Spaceport Workers (wrk01 - wrk06)
|
|
for ip in 140.44.4.51 140.44.4.52 140.44.4.53 140.44.4.54 140.44.4.55 140.44.4.56; do
|
|
ssh $SSH_OPTS root@$ip "systemctl stop k3s-agent && sync && shutdown -h now" 2>/dev/null || true
|
|
done
|
|
sleep 15
|
|
|
|
# ------------------------------------------------------------------
|
|
# TIER 4: Storage Arrays (Synology DSM Safe Mode)
|
|
# ------------------------------------------------------------------
|
|
# Synology NAS (14.10.10.71, 14.10.10.72) automatically enters DSM Safe Mode
|
|
# via native NUT slave daemon on receiving LOWBATT/FSD from 14.4.4.44.
|
|
log "Tier 4: Synology NAS Safe Mode engaged via NUT slave protocol."
|
|
sleep 10
|
|
|
|
# ------------------------------------------------------------------
|
|
# TIER 5: Kubernetes Control Planes & Swarm Managers
|
|
# ------------------------------------------------------------------
|
|
log "Tier 5: Halting K3s control planes and Swarm managers..."
|
|
# Spaceport Masters (ctl01 - ctl04)
|
|
for ip in 140.44.4.41 140.44.4.42 140.44.4.43 140.44.4.44; do
|
|
ssh $SSH_OPTS root@$ip "k3s etcd-snapshot save --name pre-shutdown-snapshot 2>/dev/null || true; systemctl stop k3s && sync && shutdown -h now" 2>/dev/null || true
|
|
done
|
|
|
|
# Aerodrome Masters (ctl01 - ctl03)
|
|
for ip in 140.44.4.11 140.44.4.12 140.44.4.13; do
|
|
ssh $SSH_OPTS root@$ip "k3s etcd-snapshot save --name pre-shutdown-snapshot 2>/dev/null || true; systemctl stop k3s && sync && shutdown -h now" 2>/dev/null || true
|
|
done
|
|
|
|
# Swarm Managers (swm01 - swm05)
|
|
for ip in 140.44.4.71 140.44.4.72 140.44.4.73 140.44.4.74 140.44.4.75; do
|
|
ssh $SSH_OPTS root@$ip "sync && shutdown -h now" 2>/dev/null || true
|
|
done
|
|
sleep 5
|
|
|
|
# ------------------------------------------------------------------
|
|
# TIER 6: NUT Master Final Signal & Edge Cutoff
|
|
# ------------------------------------------------------------------
|
|
log "Tier 6: Executing final local halt and arming killpower..."
|
|
touch /etc/killpower
|
|
/sbin/shutdown -h +0
|