diff --git a/common.sh b/common.sh old mode 100644 new mode 100755 index 582d486..86262b7 --- a/common.sh +++ b/common.sh @@ -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