127 lines
5.0 KiB
Bash
127 lines
5.0 KiB
Bash
#!/bin/bash
|
|
# -----------------------------------------------------------------------------------------------
|
|
# --------------------------------- Failover State Reset ---------------------------------------
|
|
# -----------------------------------------------------------------------------------------------
|
|
# Resets the failover state file to NORMAL and clears all tier flags.
|
|
# Use when the failover state file is stuck in a non-NORMAL state after testing,
|
|
# a failed handback, or manual intervention that left state inconsistent.
|
|
#
|
|
# Does NOT start or stop any containers — state file only.
|
|
# After reset, failover.sh will resume from NORMAL on its next cycle.
|
|
#
|
|
# ⚠️ Only run this when you have manually verified both servers are in their
|
|
# correct states — right containers running on the right server, DDNS correct.
|
|
# Resetting state without verifying the actual state can cause failover.sh
|
|
# to make incorrect decisions on its next cycle.
|
|
#
|
|
# Supports --dry-run to show what would be reset without changing anything.
|
|
# Supports --status to show the current state file contents.
|
|
# -----------------------------------------------------------------------------------------------
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
source "$SCRIPT_DIR/../Master.conf"
|
|
source "$SCRIPT_DIR/../common.sh"
|
|
|
|
parse_args "$@"
|
|
|
|
# -----------------------------------------------------------------------------------------------
|
|
# ━━━ $ICON_GEAR Setup ━━━
|
|
# -----------------------------------------------------------------------------------------------
|
|
echo ""
|
|
echo "━━━ $ICON_GEAR Setup ━━━"
|
|
|
|
if [[ "$EUID" -ne 0 ]]; then
|
|
error "Must be run as root"
|
|
exit 1
|
|
fi
|
|
|
|
success "Running as root"
|
|
[[ "$DRY_RUN" == true ]] && warn "DRY RUN — no changes will be made"
|
|
|
|
# -----------------------------------------------------------------------------------------------
|
|
# ━━━ $ICON_SUMMARY Current State ━━━
|
|
# -----------------------------------------------------------------------------------------------
|
|
echo ""
|
|
echo "━━━ $ICON_SUMMARY Current State ━━━"
|
|
|
|
if [[ ! -f "$FAILOVER_STATE_FILE" ]]; then
|
|
warn "State file not found: $FAILOVER_STATE_FILE"
|
|
warn "Will be created fresh on reset"
|
|
else
|
|
info "State file: $FAILOVER_STATE_FILE"
|
|
echo ""
|
|
while IFS='=' read -r key value; do
|
|
[[ -z "$key" ]] && continue
|
|
echo " $ICON_INFO $key = $value"
|
|
done < "$FAILOVER_STATE_FILE"
|
|
fi
|
|
|
|
if [[ "$SHOW_STATUS" == true ]]; then
|
|
exit 0
|
|
fi
|
|
|
|
# -----------------------------------------------------------------------------------------------
|
|
# ━━━ Confirmation ━━━
|
|
# -----------------------------------------------------------------------------------------------
|
|
echo ""
|
|
warn "$ICON_WARN This will reset the failover state to NORMAL"
|
|
warn "Only proceed if you have verified both servers are in their correct states"
|
|
warn " — Right containers running on the right server"
|
|
warn " — DDNS pointing at the correct server"
|
|
warn " — No active failover in progress"
|
|
echo ""
|
|
|
|
if [[ "$DRY_RUN" == false ]]; then
|
|
read -r -p "Type YES to confirm reset: " CONFIRM
|
|
if [[ "$CONFIRM" != "YES" ]]; then
|
|
info "Reset cancelled"
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
# -----------------------------------------------------------------------------------------------
|
|
# ━━━ $ICON_FAILOVER Reset State File ━━━
|
|
# -----------------------------------------------------------------------------------------------
|
|
echo ""
|
|
echo "━━━ $ICON_FAILOVER Resetting State File ━━━"
|
|
|
|
if [[ "$DRY_RUN" == true ]]; then
|
|
warn "DRY RUN — would write:"
|
|
echo " state=NORMAL"
|
|
echo " failover_start=0"
|
|
echo " handback_strikes=0"
|
|
echo " tier2_started=false"
|
|
echo " tier3_started=false"
|
|
echo " tier4_started=false"
|
|
echo " last_reset=$(date '+%Y-%m-%d %H:%M:%S')"
|
|
else
|
|
mkdir -p "$(dirname "$FAILOVER_STATE_FILE")"
|
|
cat > "$FAILOVER_STATE_FILE" << EOF
|
|
state=NORMAL
|
|
failover_start=0
|
|
handback_strikes=0
|
|
tier2_started=false
|
|
tier3_started=false
|
|
tier4_started=false
|
|
last_reset=$(date '+%Y-%m-%d %H:%M:%S')
|
|
EOF
|
|
success "State file reset to NORMAL"
|
|
fi
|
|
|
|
# -----------------------------------------------------------------------------------------------
|
|
# ━━━ $ICON_SUMMARY Summary ━━━
|
|
# -----------------------------------------------------------------------------------------------
|
|
echo ""
|
|
echo "━━━━━ $ICON_SUMMARY FAILOVER STATE RESET SUMMARY ━━━━━"
|
|
if [[ "$DRY_RUN" == true ]]; then
|
|
echo "$ICON_WARN Status: DRY RUN — no changes made"
|
|
else
|
|
echo "$ICON_DONE Status: $ICON_SUCCESS State reset to NORMAL"
|
|
echo "$ICON_TIME Reset at: $(date '+%Y-%m-%d %H:%M:%S')"
|
|
echo ""
|
|
echo "$ICON_INFO failover.sh will resume from NORMAL on next cycle"
|
|
echo "$ICON_INFO No containers were started or stopped"
|
|
notify "Failover state manually reset to NORMAL on $(hostname)" "Failover State Reset" "normal"
|
|
fi
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" |