mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
chore: switch to new wgtunnel via tunnelsdk (#6489)
This commit is contained in:
+14
-40
@@ -85,6 +85,7 @@ import (
|
||||
"github.com/coder/coder/provisionersdk"
|
||||
sdkproto "github.com/coder/coder/provisionersdk/proto"
|
||||
"github.com/coder/coder/tailnet"
|
||||
"github.com/coder/wgtunnel/tunnelsdk"
|
||||
)
|
||||
|
||||
// ReadGitAuthProvidersFromEnv is provided for compatibility purposes with the
|
||||
@@ -538,34 +539,25 @@ flags, and YAML configuration. The precedence is as follows:
|
||||
return xerrors.Errorf("configure http client: %w", err)
|
||||
}
|
||||
|
||||
var (
|
||||
ctxTunnel, closeTunnel = context.WithCancel(ctx)
|
||||
tunnel *devtunnel.Tunnel
|
||||
tunnelErr <-chan error
|
||||
)
|
||||
defer closeTunnel()
|
||||
|
||||
// If the access URL is empty, we attempt to run a reverse-proxy
|
||||
// tunnel to make the initial setup really simple.
|
||||
var (
|
||||
tunnel *tunnelsdk.Tunnel
|
||||
tunnelDone <-chan struct{} = make(chan struct{}, 1)
|
||||
)
|
||||
if cfg.AccessURL.String() == "" {
|
||||
cmd.Printf("Opening tunnel so workspaces can connect to your deployment. For production scenarios, specify an external access URL\n")
|
||||
tunnel, tunnelErr, err = devtunnel.New(ctxTunnel, logger.Named("devtunnel"))
|
||||
tunnel, err = devtunnel.New(ctx, logger.Named("devtunnel"), cfg.WgtunnelHost.String())
|
||||
if err != nil {
|
||||
return xerrors.Errorf("create tunnel: %w", err)
|
||||
}
|
||||
err = cfg.AccessURL.Set(tunnel.URL)
|
||||
if err != nil {
|
||||
return xerrors.Errorf("set access url: %w", err)
|
||||
}
|
||||
defer tunnel.Close()
|
||||
tunnelDone = tunnel.Wait()
|
||||
cfg.AccessURL = clibase.URL(*tunnel.URL)
|
||||
|
||||
if cfg.WildcardAccessURL.String() == "" {
|
||||
u, err := parseURL(tunnel.URL)
|
||||
if err != nil {
|
||||
return xerrors.Errorf("parse tunnel url: %w", err)
|
||||
}
|
||||
|
||||
// Suffixed wildcard access URL.
|
||||
u, err = url.Parse(fmt.Sprintf("*--%s", u.Hostname()))
|
||||
u, err := url.Parse(fmt.Sprintf("*--%s", tunnel.URL.Hostname()))
|
||||
if err != nil {
|
||||
return xerrors.Errorf("parse wildcard url: %w", err)
|
||||
}
|
||||
@@ -1090,10 +1082,8 @@ flags, and YAML configuration. The precedence is as follows:
|
||||
_, _ = fmt.Fprintln(cmd.OutOrStdout(), cliui.Styles.Bold.Render(
|
||||
"Interrupt caught, gracefully exiting. Use ctrl+\\ to force quit",
|
||||
))
|
||||
case exitErr = <-tunnelErr:
|
||||
if exitErr == nil {
|
||||
exitErr = xerrors.New("dev tunnel closed unexpectedly")
|
||||
}
|
||||
case <-tunnelDone:
|
||||
exitErr = xerrors.New("dev tunnel closed unexpectedly")
|
||||
case exitErr = <-errCh:
|
||||
}
|
||||
if exitErr != nil && !xerrors.Is(exitErr, context.Canceled) {
|
||||
@@ -1162,8 +1152,8 @@ flags, and YAML configuration. The precedence is as follows:
|
||||
// Close tunnel after we no longer have in-flight connections.
|
||||
if tunnel != nil {
|
||||
cmd.Println("Waiting for tunnel to close...")
|
||||
closeTunnel()
|
||||
<-tunnelErr
|
||||
_ = tunnel.Close()
|
||||
<-tunnel.Wait()
|
||||
cmd.Println("Done waiting for tunnel")
|
||||
}
|
||||
|
||||
@@ -1241,22 +1231,6 @@ flags, and YAML configuration. The precedence is as follows:
|
||||
return root
|
||||
}
|
||||
|
||||
// parseURL parses a string into a URL.
|
||||
func parseURL(u string) (*url.URL, error) {
|
||||
hasScheme := strings.HasPrefix(u, "http:") || strings.HasPrefix(u, "https:")
|
||||
|
||||
if !hasScheme {
|
||||
return nil, xerrors.Errorf("URL %q must have a scheme of either http or https", u)
|
||||
}
|
||||
|
||||
parsed, err := url.Parse(u)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return parsed, nil
|
||||
}
|
||||
|
||||
// isLocalURL returns true if the hostname of the provided URL appears to
|
||||
// resolve to a loopback address.
|
||||
func isLocalURL(ctx context.Context, u *url.URL) (bool, error) {
|
||||
|
||||
Reference in New Issue
Block a user