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:
gmer4lfe
2026-05-24 18:56:59 -04:00
parent 7c14627bc3
commit b754842da2
Regular → Executable
+13 -7
View File
@@ -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