diff --git a/Docker_Essentials/docker_update.sh b/Docker_Essentials/docker_update.sh index 4af3a73..033958c 100755 --- a/Docker_Essentials/docker_update.sh +++ b/Docker_Essentials/docker_update.sh @@ -219,7 +219,7 @@ if [[ "$REMAINDER_MODE" == true ]]; then # Updating them here risks version divergence: if remote's writeback after handback # encounters data written by a newer version, it may not handle it correctly. for _tier in 1 2 3 4; do - _tier_var="FALLBACK_${MY_ID}_COVERS_${REMOTE_ID}_TIER${_tier}" + _tier_var="FALLBACK_${REMOTE_ID}_TIER${_tier}" eval "_tier_arr=(\"\${${_tier_var}[@]:-}\")" 2>/dev/null for _c in "${_tier_arr[@]}"; do [[ -n "$_c" ]] && _exclude["$_c"]=1 diff --git a/Fallback/fallback_test.sh b/Fallback/fallback_test.sh index 274541f..7e0c0c4 100755 --- a/Fallback/fallback_test.sh +++ b/Fallback/fallback_test.sh @@ -206,7 +206,7 @@ if [[ "$SHOW_STATUS" == true ]]; then fi # Show Tier 1 containers for this host - TIER1_VAR="FALLBACK_${MY_ID}_COVERS_${REMOTE_ID}_TIER1" + TIER1_VAR="FALLBACK_${REMOTE_ID}_TIER1" eval "TIER1_CONTAINERS=(\"\${${TIER1_VAR}[@]:-}\")" echo "$ICON_CONTAINERS Tier 1 to test: ${TIER1_CONTAINERS[*]:-none configured}" echo "━━━━━━━━━━━━━━━━━━━━━━━" @@ -223,8 +223,8 @@ TOTAL_START=$(date +%s) phase_pass() { PHASES_PASS+=("$1"); warn "$ICON_DONE Phase: $1 — PASSED ✅"; } phase_fail() { PHASES_FAIL+=("$1"); error "Phase: $1 — FAILED ❌"; } -# Get Tier 1 containers for this server's fallback responsibility -TIER1_VAR="FALLBACK_${MY_ID}_COVERS_${REMOTE_ID}_TIER1" +# Get Tier 1 containers defined in remote's own conf +TIER1_VAR="FALLBACK_${REMOTE_ID}_TIER1" eval "TIER1_CONTAINERS=(\"\${${TIER1_VAR}[@]:-}\")" # ============================================================================================== @@ -286,7 +286,7 @@ fi # Tier 1 containers configured if [[ ${#TIER1_CONTAINERS[@]} -eq 0 ]]; then error "No Tier 1 containers configured for $MY_ID → $REMOTE_ID" - error "Check FALLBACK_${MY_ID}_COVERS_${REMOTE_ID}_TIER1 in host*.conf" + error "Check FALLBACK_${REMOTE_ID}_TIER1 in ${REMOTE_ID,,}.conf" phase_fail "Pre-flight" exit 1 fi diff --git a/Monitors/mesh_monitor.sh b/Monitors/mesh_monitor.sh index c5e5735..78b1d87 100755 --- a/Monitors/mesh_monitor.sh +++ b/Monitors/mesh_monitor.sh @@ -142,30 +142,29 @@ for covered in "${ALL_HOST_IDS[@]}"; do covered_owner_var="${covered}_OWNER"; covered_owner="${!covered_owner_var:-$covered}" covered_email_var="${covered}_OWNER_EMAIL"; covered_email="${!covered_email_var:-}" - # Find who covers this host and collect their tiers + # Each host defines its own recovery profile — read directly from covered host's vars any_tiers=false declare -A tier_containers=() declare -A tier_delays=() covered_by="" - for covering in "${ALL_HOST_IDS[@]}"; do - [[ "$covering" == "$covered" ]] && continue + for tier in 1 2 3 4; do + containers=$(get_array "FALLBACK_${covered}_TIER${tier}") + [[ -z "$containers" ]] && continue + any_tiers=true + tier_containers[$tier]="$containers" + delay_var="${covered}_TIER${tier}_DELAY" + tier_delays[$tier]="${!delay_var:-0}" + done - for tier in 1 2 3 4; do - containers=$(get_array "FALLBACK_${covering}_COVERS_${covered}_TIER${tier}") - [[ -z "$containers" ]] && continue - any_tiers=true - tier_containers[$tier]="$containers" - delay_var="${covered}_TIER${tier}_DELAY" - tier_delays[$tier]="${!delay_var:-0}" - done - - [[ "$any_tiers" == true ]] && { + if [[ "$any_tiers" == true ]]; then + for covering in "${ALL_HOST_IDS[@]}"; do + [[ "$covering" == "$covered" ]] && continue covering_owner_var="${covering}_OWNER" covering_owner="${!covering_owner_var:-$covering}" - covered_by="$covering ($covering_owner)" - } - done + covered_by="${covered_by:+$covered_by, }$covering ($covering_owner)" + done + fi [[ "$any_tiers" == false ]] && continue diff --git a/Partnership/partnership_manager.sh b/Partnership/partnership_manager.sh index 0d45069..e7bc8e1 100755 --- a/Partnership/partnership_manager.sh +++ b/Partnership/partnership_manager.sh @@ -512,7 +512,7 @@ gather_partner_fallback_containers() { eval "${out_var}=()" local tier var for tier in TIER1 TIER2 TIER3 TIER4; do - var="FALLBACK_${MY_ID}_COVERS_${REMOTE_ID}_${tier}" + var="FALLBACK_${REMOTE_ID}_${tier}" # Check if var is set and is an array if declare -p "$var" >/dev/null 2>&1; then local -a _tmp_arr diff --git a/Plugin/unraid/include/monitor.php b/Plugin/unraid/include/monitor.php index a610529..4dda969 100644 --- a/Plugin/unraid/include/monitor.php +++ b/Plugin/unraid/include/monitor.php @@ -109,19 +109,17 @@ function vv_fallback_active(): array { if ($c) $running[strtolower($c['n'])] = $c['i']; } - // Parse FALLBACK arrays from this host's conf - $confFile = strtolower($myId) . '.conf'; - $rawConf = vv_read_conf_raw($confFile); - $result = []; foreach ($allHostIds as $covered) { if ($covered === $myId) continue; $coveredHostname = $vars[$covered] ?? ''; if (!$coveredHostname) continue; + // Covered host defines its own recovery profile — read from their conf + $coveredRaw = vv_read_conf_raw(strtolower($covered) . '.conf'); $names = []; for ($tier = 1; $tier <= 4; $tier++) - $names = array_merge($names, vv_parse_bash_array($rawConf, "FALLBACK_{$myId}_COVERS_{$covered}_TIER{$tier}")); + $names = array_merge($names, vv_parse_bash_array($coveredRaw, "FALLBACK_{$covered}_TIER{$tier}")); $active = []; foreach ($names as $name) {