|
|
|
|
@ -121,24 +121,10 @@ func runStatus(ctx context.Context, args []string) error { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
switch st.BackendState { |
|
|
|
|
default: |
|
|
|
|
fmt.Fprintf(Stderr, "unexpected state: %s\n", st.BackendState) |
|
|
|
|
os.Exit(1) |
|
|
|
|
case ipn.Stopped.String(): |
|
|
|
|
outln("Tailscale is stopped.") |
|
|
|
|
os.Exit(1) |
|
|
|
|
case ipn.NeedsLogin.String(): |
|
|
|
|
outln("Logged out.") |
|
|
|
|
if st.AuthURL != "" { |
|
|
|
|
printf("\nLog in at: %s\n", st.AuthURL) |
|
|
|
|
} |
|
|
|
|
os.Exit(1) |
|
|
|
|
case ipn.NeedsMachineAuth.String(): |
|
|
|
|
outln("Machine is not yet authorized by tailnet admin.") |
|
|
|
|
description, ok := isRunningOrStarting(st) |
|
|
|
|
if !ok { |
|
|
|
|
outln(description) |
|
|
|
|
os.Exit(1) |
|
|
|
|
case ipn.Running.String(), ipn.Starting.String(): |
|
|
|
|
// Run below.
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if len(st.Health) > 0 { |
|
|
|
|
@ -222,6 +208,27 @@ func runStatus(ctx context.Context, args []string) error { |
|
|
|
|
return nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// isRunningOrStarting reports whether st is in state Running or Starting.
|
|
|
|
|
// It also returns a description of the status suitable to display to a user.
|
|
|
|
|
func isRunningOrStarting(st *ipnstate.Status) (description string, ok bool) { |
|
|
|
|
switch st.BackendState { |
|
|
|
|
default: |
|
|
|
|
return fmt.Sprintf("unexpected state: %s", st.BackendState), false |
|
|
|
|
case ipn.Stopped.String(): |
|
|
|
|
return "Tailscale is stopped.", false |
|
|
|
|
case ipn.NeedsLogin.String(): |
|
|
|
|
s := "Logged out." |
|
|
|
|
if st.AuthURL != "" { |
|
|
|
|
s += fmt.Sprintf("\nLog in at: %s", st.AuthURL) |
|
|
|
|
} |
|
|
|
|
return s, false |
|
|
|
|
case ipn.NeedsMachineAuth.String(): |
|
|
|
|
return "Machine is not yet authorized by tailnet admin.", false |
|
|
|
|
case ipn.Running.String(), ipn.Starting.String(): |
|
|
|
|
return st.BackendState, true |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func dnsOrQuoteHostname(st *ipnstate.Status, ps *ipnstate.PeerStatus) string { |
|
|
|
|
baseName := dnsname.TrimSuffix(ps.DNSName, st.MagicDNSSuffix) |
|
|
|
|
if baseName != "" { |
|
|
|
|
|