diff --git a/cmd/cloudflared/tunnel/cmd.go b/cmd/cloudflared/tunnel/cmd.go index 8994e3ad..4c5a41b5 100644 --- a/cmd/cloudflared/tunnel/cmd.go +++ b/cmd/cloudflared/tunnel/cmd.go @@ -339,7 +339,9 @@ func StartServer( errC <- metrics.ServeMetrics(metricsListener, shutdownC, readinessCh, log) }() - ingressRules.StartOrigins(&wg, log, shutdownC, errC) + if err := ingressRules.StartOrigins(&wg, log, shutdownC, errC); err != nil { + return err + } reconnectCh := make(chan origin.ReconnectSignal, 1) if c.IsSet("stdin-control") { diff --git a/ingress/ingress.go b/ingress/ingress.go index dcf70ae1..eeaa2184 100644 --- a/ingress/ingress.go +++ b/ingress/ingress.go @@ -113,12 +113,18 @@ func (ing Ingress) IsEmpty() bool { } // StartOrigins will start any origin services managed by cloudflared, e.g. proxy servers or Hello World. -func (ing Ingress) StartOrigins(wg *sync.WaitGroup, log *zerolog.Logger, shutdownC <-chan struct{}, errC chan error) { +func (ing Ingress) StartOrigins( + wg *sync.WaitGroup, + log *zerolog.Logger, + shutdownC <-chan struct{}, + errC chan error, +) error { for _, rule := range ing.Rules { if err := rule.Service.start(wg, log, shutdownC, errC, rule.Config); err != nil { - log.Error().Msgf("Error starting local service %s: %s", rule.Service, err) + return errors.Wrapf(err, "Error starting local service %s", rule.Service) } } + return nil } // CatchAll returns the catch-all rule (i.e. the last rule) diff --git a/origin/proxy_test.go b/origin/proxy_test.go index 6e07a559..193764f0 100644 --- a/origin/proxy_test.go +++ b/origin/proxy_test.go @@ -123,7 +123,7 @@ func TestProxySingleOrigin(t *testing.T) { var wg sync.WaitGroup errC := make(chan error) - ingressRule.StartOrigins(&wg, &log, ctx.Done(), errC) + require.NoError(t, ingressRule.StartOrigins(&wg, &log, ctx.Done(), errC)) client := NewClient(ingressRule, testTags, &log) t.Run("testProxyHTTP", testProxyHTTP(t, client)) @@ -256,7 +256,7 @@ func TestProxyMultipleOrigins(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) errC := make(chan error) var wg sync.WaitGroup - ingress.StartOrigins(&wg, &log, ctx.Done(), errC) + require.NoError(t, ingress.StartOrigins(&wg, &log, ctx.Done(), errC)) client := NewClient(ingress, testTags, &log)