cmd/tailscale: print more detail in connection failure error message

Before:

failed to connect to local tailscaled (which appears to be running). Got error: Get "http://local-tailscaled.sock/localapi/v0/status": EOF

After:

failed to connect to local tailscaled (which appears to be running as IPNExtension, pid 2118). Got error: Get "http://local-tailscaled.sock/localapi/v0/status": EOF

This was useful just now, as it made it clear that tailscaled I thought
I was connecting to might not in fact be running; there was
a second tailscaled running that made the error message slightly misleading.

Signed-off-by: Josh Bleecher Snyder <josh@tailscale.com>
pull/3492/head
Josh Bleecher Snyder 3 years ago committed by Josh Bleecher Snyder
parent 003089820d
commit de635ac0a8

@ -25,23 +25,23 @@ func fixTailscaledConnectError(origErr error) error {
if err != nil { if err != nil {
return fmt.Errorf("failed to connect to local Tailscaled process and failed to enumerate processes while looking for it") return fmt.Errorf("failed to connect to local Tailscaled process and failed to enumerate processes while looking for it")
} }
found := false var foundProc ps.Process
for _, proc := range procs { for _, proc := range procs {
base := filepath.Base(proc.Executable()) base := filepath.Base(proc.Executable())
if base == "tailscaled" { if base == "tailscaled" {
found = true foundProc = proc
break break
} }
if runtime.GOOS == "darwin" && base == "IPNExtension" { if runtime.GOOS == "darwin" && base == "IPNExtension" {
found = true foundProc = proc
break break
} }
if runtime.GOOS == "windows" && strings.EqualFold(base, "tailscaled.exe") { if runtime.GOOS == "windows" && strings.EqualFold(base, "tailscaled.exe") {
found = true foundProc = proc
break break
} }
} }
if !found { if foundProc == nil {
switch runtime.GOOS { switch runtime.GOOS {
case "windows": case "windows":
return fmt.Errorf("failed to connect to local tailscaled process; is the Tailscale service running?") return fmt.Errorf("failed to connect to local tailscaled process; is the Tailscale service running?")
@ -52,5 +52,5 @@ func fixTailscaledConnectError(origErr error) error {
} }
return fmt.Errorf("failed to connect to local tailscaled process; it doesn't appear to be running") return fmt.Errorf("failed to connect to local tailscaled process; it doesn't appear to be running")
} }
return fmt.Errorf("failed to connect to local tailscaled (which appears to be running). Got error: %w", origErr) return fmt.Errorf("failed to connect to local tailscaled (which appears to be running as %v, pid %v). Got error: %w", foundProc.Executable(), foundProc.Pid(), origErr)
} }

Loading…
Cancel
Save