mirror of https://github.com/tailscale/tailscale/
parent
f27a57911b
commit
483141094c
@ -0,0 +1,67 @@
|
|||||||
|
// 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"
|
||||||
|
"log"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/peterbourgon/ff/v2/ffcli"
|
||||||
|
"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)
|
||||||
|
}
|
||||||
|
|
||||||
|
c, bc, ctx, cancel := connect(ctx)
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
|
timer := time.AfterFunc(5*time.Second, func() {
|
||||||
|
log.Fatalf("timeout running stop")
|
||||||
|
})
|
||||||
|
defer timer.Stop()
|
||||||
|
|
||||||
|
bc.SetNotifyCallback(func(n ipn.Notify) {
|
||||||
|
if n.ErrMessage != nil {
|
||||||
|
log.Fatal(*n.ErrMessage)
|
||||||
|
}
|
||||||
|
if n.Status != nil {
|
||||||
|
cur := n.Status.BackendState
|
||||||
|
switch cur {
|
||||||
|
case "Stopped":
|
||||||
|
log.Printf("already stopped")
|
||||||
|
cancel()
|
||||||
|
default:
|
||||||
|
log.Printf("was in state %q", cur)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if n.State != nil {
|
||||||
|
log.Printf("now in state %q", *n.State)
|
||||||
|
if *n.State == ipn.Stopped {
|
||||||
|
cancel()
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.Printf("Notify: %#v", n)
|
||||||
|
})
|
||||||
|
|
||||||
|
bc.RequestStatus()
|
||||||
|
bc.SetWantRunning(false)
|
||||||
|
pump(ctx, bc, c)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
Loading…
Reference in New Issue