summaryrefslogtreecommitdiffhomepage
path: root/cmd/tailscaled/cli/down.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/tailscaled/cli/down.go')
-rw-r--r--cmd/tailscaled/cli/down.go46
1 files changed, 46 insertions, 0 deletions
diff --git a/cmd/tailscaled/cli/down.go b/cmd/tailscaled/cli/down.go
new file mode 100644
index 000000000..c0a9034fe
--- /dev/null
+++ b/cmd/tailscaled/cli/down.go
@@ -0,0 +1,46 @@
+// Copyright (c) 2020 Tailscale Inc & AUTHORS All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package cli
+
+import (
+ "context"
+ "fmt"
+ "log"
+ "os"
+
+ "github.com/peterbourgon/ff/v2/ffcli"
+ "tailscale.com/client/tailscale"
+ "tailscale.com/ipn"
+)
+
+var downCmd = &ffcli.Command{
+ Name: "down",
+ ShortUsage: "down",
+ ShortHelp: "Disconnect from Tailscale",
+
+ Exec: runDown,
+}
+
+func runDown(ctx context.Context, args []string) error {
+ if len(args) > 0 {
+ log.Fatalf("too many non-flag arguments: %q", args)
+ }
+
+ st, err := tailscale.Status(ctx)
+ if err != nil {
+ return fmt.Errorf("error fetching current status: %w", err)
+ }
+ if st.BackendState == "Stopped" {
+ fmt.Fprintf(os.Stderr, "Tailscale was already stopped.\n")
+ return nil
+ }
+ _, err = tailscale.EditPrefs(ctx, &ipn.MaskedPrefs{
+ Prefs: ipn.Prefs{
+ WantRunning: false,
+ },
+ WantRunningSet: true,
+ })
+ return err
+}