fix(common): retry Tailscale IP resolution up to 3 times before failing
The first cron run of critical_sync_maintenance failed because Tailscale had a transient moment at startup. resolve_remote_ip() now retries 3 times with a 5s delay before giving up, making it resilient to brief daemon hiccups without masking real peer-offline conditions.
This commit is contained in:
@@ -613,17 +613,23 @@ detect_hosts() {
|
||||
resolve_remote_ip() {
|
||||
log "Resolving remote IP for $REMOTE_SERVER_NAME..."
|
||||
local ts_name="${REMOTE_SERVER_NAME,,}"
|
||||
local attempts=3
|
||||
|
||||
# Direct lookup — works when MagicDNS short-name resolution is active
|
||||
REMOTE_SERVER=$(tailscale ip -4 "$ts_name" 2>/dev/null)
|
||||
for ((i=1; i<=attempts; i++)); do
|
||||
# Direct lookup — works when MagicDNS short-name resolution is active
|
||||
REMOTE_SERVER=$(tailscale ip -4 "$ts_name" 2>/dev/null)
|
||||
|
||||
# Fallback — parse tailscale status for FQDN entries (e.g. hostname.tailXXXX.ts.net)
|
||||
if [[ -z "$REMOTE_SERVER" ]]; then
|
||||
REMOTE_SERVER=$(tailscale status 2>/dev/null | awk -v name="$ts_name" '$2 ~ "^" name { print $1; exit }')
|
||||
fi
|
||||
# Fallback — parse tailscale status for FQDN entries (e.g. hostname.tailXXXX.ts.net)
|
||||
if [[ -z "$REMOTE_SERVER" ]]; then
|
||||
REMOTE_SERVER=$(tailscale status 2>/dev/null | awk -v name="$ts_name" '$2 ~ "^" name { print $1; exit }')
|
||||
fi
|
||||
|
||||
[[ -n "$REMOTE_SERVER" ]] && break
|
||||
[[ $i -lt $attempts ]] && { warn "Tailscale resolution attempt $i/$attempts failed — retrying in 5s..."; sleep 5; }
|
||||
done
|
||||
|
||||
if [[ -z "$REMOTE_SERVER" ]]; then
|
||||
error "Failed to resolve Tailscale IP for $REMOTE_SERVER_NAME"
|
||||
error "Failed to resolve Tailscale IP for $REMOTE_SERVER_NAME after $attempts attempts"
|
||||
error "Check: tailscale status | grep $ts_name"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user