diff --git a/cmd/cloudflared/tunnel/cmd.go b/cmd/cloudflared/tunnel/cmd.go index bdabcd0b..8bc88a67 100644 --- a/cmd/cloudflared/tunnel/cmd.go +++ b/cmd/cloudflared/tunnel/cmd.go @@ -181,7 +181,7 @@ func runAdhocNamedTunnel(sc *subcommandContext, name, credentialsOutputPath stri if r, ok := routeFromFlag(sc.c); ok { if res, err := sc.route(tunnel.ID, r); err != nil { - sc.log.Err(err).Msg("failed to create route, please create it manually") + sc.log.Err(err).Str("route", r.String()).Msg("failed to provision routing, please create it manually via Cloudflare dashboard or UI; most likely you already have a conflicting record there") } else { sc.log.Info().Msg(res.SuccessSummary()) } diff --git a/cmd/cloudflared/tunnel/configuration.go b/cmd/cloudflared/tunnel/configuration.go index c2be5784..5800a721 100644 --- a/cmd/cloudflared/tunnel/configuration.go +++ b/cmd/cloudflared/tunnel/configuration.go @@ -160,10 +160,6 @@ func prepareTunnelConfig( if err != nil { log.Err(err).Str(LogFieldHostname, configHostname).Msg("Invalid hostname") return nil, ingress.Ingress{}, errors.Wrap(err, "Invalid hostname") - } else if hostname != "" && isNamedTunnel { - log.Warn().Msg("The property `hostname` in your configuration is ignored because you configured a Named Tunnel " + - "in the property `tunnel`. Make sure to provision the routing (e.g. via `cloudflared tunnel route`) or else " + - "your origin will not be reachable. You should remove the `hostname` property to avoid this warning.") } isFreeTunnel := hostname == "" clientID := c.String("id") diff --git a/cmd/cloudflared/tunnel/subcommands.go b/cmd/cloudflared/tunnel/subcommands.go index 69e92d0f..5ad36cb9 100644 --- a/cmd/cloudflared/tunnel/subcommands.go +++ b/cmd/cloudflared/tunnel/subcommands.go @@ -595,6 +595,12 @@ func runCommand(c *cli.Context) error { } } + if c.String("hostname") != "" { + sc.log.Warn().Msg("The property `hostname` in your configuration is ignored because you configured a Named Tunnel " + + "in the property `tunnel` to run. Make sure to provision the routing (e.g. via `cloudflared tunnel route dns/lb`) or else " + + "your origin will not be reachable. You should remove the `hostname` property to avoid this warning.") + } + return runNamedTunnel(sc, tunnelRef) } diff --git a/tunnelstore/client.go b/tunnelstore/client.go index 89979d6a..e1f1c4e1 100644 --- a/tunnelstore/client.go +++ b/tunnelstore/client.go @@ -72,6 +72,7 @@ type Route interface { json.Marshaler RecordType() string UnmarshalResult(body io.Reader) (RouteResult, error) + String() string } type RouteResult interface { @@ -116,6 +117,10 @@ func (dr *DNSRoute) RecordType() string { return "dns" } +func (dr *DNSRoute) String() string { + return fmt.Sprintf("%s %s", dr.RecordType(), dr.userHostname) +} + func (res *DNSRouteResult) SuccessSummary() string { var msgFmt string switch res.CName { @@ -164,6 +169,10 @@ func (lr *LBRoute) RecordType() string { return "lb" } +func (lb *LBRoute) String() string { + return fmt.Sprintf("%s %s %s", lb.RecordType(), lb.lbName, lb.lbPool) +} + func (lr *LBRoute) UnmarshalResult(body io.Reader) (RouteResult, error) { var result LBRouteResult err := parseResponse(body, &result)