#!/usr/bin/env bash # pve-ha-maint.sh # Włącza/wyłącza maintenance i bezpiecznie zatrzymuje/uruchamia usługi HA. set -euo pipefail usage() { echo "Użycie: $0 enable|disable [NODE]" echo "Domyślnie NODE = \$(hostname)" exit 1 } [[ $# -ge 1 ]] || usage ACTION="$1" NODE="${2:-$(hostname)}" if [[ $EUID -ne 0 ]]; then echo "Uruchom jako root." >&2 exit 2 fi # Pomocnicze is_active() { systemctl is-active --quiet "$1"; } start_if_needed() { is_active "$1" || systemctl start "$1"; } stop_if_running() { is_active "$1" && systemctl stop "$1" || true; } case "$ACTION" in enable) echo "[INFO] Włączam maintenance na węźle: $NODE" # 1) Włącz maintenance w HA (zatrzyma migracje/restarty HA dla tego węzła) ha-manager node-maintenance enable "$NODE" # 2) Zatrzymaj lokalne demony HA + watchdog (unikniesz fence przy utracie quorum) # Kolejność: najpierw LRM, potem CRM, na końcu watchdog-mux stop_if_running pve-ha-lrm stop_if_running pve-ha-crm stop_if_running watchdog-mux echo "[OK] Maintenance włączony, usługi HA zatrzymane." ;; disable) echo "[INFO] Wyłączam maintenance na węźle: $NODE" # 1) Najpierw uruchom watchdog i demony HA (kolejność odwrotna) start_if_needed watchdog-mux start_if_needed pve-ha-crm start_if_needed pve-ha-lrm # 2) Wyłącz maintenance w HA ha-manager node-maintenance disable "$NODE" echo "[OK] Maintenance wyłączony, usługi HA działają." ;; *) usage ;; esac echo echo "[STATUS] ha-manager status:" ha-manager status | sed -n '1,120p'