diff --git a/core/tsnet.go b/core/tsnet.go index ed2d18c..3e391b1 100644 --- a/core/tsnet.go +++ b/core/tsnet.go @@ -4,6 +4,7 @@ import ( "context" fmt2 "fmt" "log/slog" + "time" "tailscale.com/ipn" @@ -40,7 +41,9 @@ func InitTsNet(ctx context.Context, cfg *Core, logger *slog.Logger, withDebugLog return nil, err } - status, err := srv.Up(ctx) + cnclCtx, cancel := context.WithTimeout(ctx, 30*time.Second) + defer cancel() + status, err := srv.Up(cnclCtx) if err != nil { logger.With(slog.String("error", err.Error())).Error("bring up tsnet server failed") return nil, err diff --git a/main.go b/main.go index 9e38d7a..66e353e 100644 --- a/main.go +++ b/main.go @@ -2,6 +2,7 @@ package main import ( "context" + "errors" "flag" "log/slog" "os" @@ -21,9 +22,14 @@ func serviceLogic(configPath string, isTsnetDebug bool, logger *slog.Logger) boo } ctx, cancelAll := context.WithCancel(context.Background()) + defer cancelAll() logger.Info("initializing tsnet server") srv, err := core.InitTsNet(ctx, &cfg.Core, logger, isTsnetDebug) if err != nil { + if errors.Is(err, context.DeadlineExceeded) { + logger.Debug("tsnet initialization timed out, retrying") + return false + } logger.With( slog.String("error", err.Error())).Error("Error initializing tsnet") os.Exit(1)