#!/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 "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"