|
|
|
|
@ -24,7 +24,7 @@ var switchCmd = &ffcli.Command{ |
|
|
|
|
LongHelp: `"tailscale switch" switches between logged in accounts. You can |
|
|
|
|
use the ID that's returned from 'tailnet switch -list' |
|
|
|
|
to pick which profile you want to switch to. Alternatively, you |
|
|
|
|
can use the Tailnet or the account names to switch as well. |
|
|
|
|
can use the Tailnet, account names, or display names to switch as well. |
|
|
|
|
|
|
|
|
|
This command is currently in alpha and may change in the future.`, |
|
|
|
|
|
|
|
|
|
@ -46,7 +46,7 @@ func init() { |
|
|
|
|
seen := make(map[string]bool, 3*len(all)) |
|
|
|
|
wordfns := []func(prof ipn.LoginProfile) string{ |
|
|
|
|
func(prof ipn.LoginProfile) string { return string(prof.ID) }, |
|
|
|
|
func(prof ipn.LoginProfile) string { return prof.NetworkProfile.DomainName }, |
|
|
|
|
func(prof ipn.LoginProfile) string { return prof.NetworkProfile.DisplayNameOrDefault() }, |
|
|
|
|
func(prof ipn.LoginProfile) string { return prof.Name }, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -57,7 +57,7 @@ func init() { |
|
|
|
|
continue |
|
|
|
|
} |
|
|
|
|
seen[word] = true |
|
|
|
|
words = append(words, fmt.Sprintf("%s\tid: %s, tailnet: %s, account: %s", word, prof.ID, prof.NetworkProfile.DomainName, prof.Name)) |
|
|
|
|
words = append(words, fmt.Sprintf("%s\tid: %s, tailnet: %s, account: %s", word, prof.ID, prof.NetworkProfile.DisplayNameOrDefault(), prof.Name)) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return words, ffcomplete.ShellCompDirectiveNoFileComp, nil |
|
|
|
|
@ -86,7 +86,7 @@ func listProfiles(ctx context.Context) error { |
|
|
|
|
} |
|
|
|
|
printRow( |
|
|
|
|
string(prof.ID), |
|
|
|
|
prof.NetworkProfile.DomainName, |
|
|
|
|
prof.NetworkProfile.DisplayNameOrDefault(), |
|
|
|
|
name, |
|
|
|
|
) |
|
|
|
|
} |
|
|
|
|
@ -107,7 +107,7 @@ func switchProfile(ctx context.Context, args []string) error { |
|
|
|
|
os.Exit(1) |
|
|
|
|
} |
|
|
|
|
var profID ipn.ProfileID |
|
|
|
|
// Allow matching by ID, Tailnet, or Account
|
|
|
|
|
// Allow matching by ID, Tailnet, Account, or Display Name
|
|
|
|
|
// in that order.
|
|
|
|
|
for _, p := range all { |
|
|
|
|
if p.ID == ipn.ProfileID(args[0]) { |
|
|
|
|
@ -131,6 +131,14 @@ func switchProfile(ctx context.Context, args []string) error { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if profID == "" { |
|
|
|
|
for _, p := range all { |
|
|
|
|
if p.NetworkProfile.DisplayName == args[0] { |
|
|
|
|
profID = p.ID |
|
|
|
|
break |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if profID == "" { |
|
|
|
|
errf("No profile named %q\n", args[0]) |
|
|
|
|
os.Exit(1) |
|
|
|
|
|