diff --git a/proxmox-ha-manage.sh b/proxmox-ha-manage.sh new file mode 100644 index 0000000..fffe73f --- /dev/null +++ b/proxmox-ha-manage.sh @@ -0,0 +1,63 @@ +#!/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'