diff --git a/cmd/kubevpn/cmds/connect.go b/cmd/kubevpn/cmds/connect.go index f554f7a5..57fda6b8 100644 --- a/cmd/kubevpn/cmds/connect.go +++ b/cmd/kubevpn/cmds/connect.go @@ -1,6 +1,7 @@ package cmds import ( + "context" "fmt" "io" "os" @@ -12,6 +13,7 @@ import ( cmdutil "k8s.io/kubectl/pkg/cmd/util" "k8s.io/kubectl/pkg/util/i18n" "k8s.io/kubectl/pkg/util/templates" + "k8s.io/utils/ptr" "github.com/wencaiwulue/kubevpn/v2/pkg/config" "github.com/wencaiwulue/kubevpn/v2/pkg/daemon" @@ -119,6 +121,28 @@ func CmdConnect(f cmdutil.Factory) *cobra.Command { } if !req.Foreground { util.Print(os.Stdout, "Now you can access resources in the kubernetes cluster, enjoy it :)") + } else { + <-cmd.Context().Done() + disconnect, err := cli.Disconnect(context.Background(), &rpc.DisconnectRequest{ + KubeconfigBytes: ptr.To(string(bytes)), + Namespace: ptr.To(ns), + SshJump: sshConf.ToRPC(), + }) + if err != nil { + log.Errorf("disconnect error: %v", err) + return err + } + for { + recv, err := disconnect.Recv() + if err == io.EOF { + break + } else if err != nil { + log.Errorf("receive disconnect error: %v", err) + return err + } + log.Info(recv.Message) + } + log.Info("disconnect successfully") } return nil }, diff --git a/pkg/daemon/action/connect.go b/pkg/daemon/action/connect.go index 38e93a18..df2e2f14 100644 --- a/pkg/daemon/action/connect.go +++ b/pkg/daemon/action/connect.go @@ -11,7 +11,6 @@ import ( "github.com/spf13/pflag" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - "k8s.io/utils/pointer" "github.com/wencaiwulue/kubevpn/v2/pkg/config" "github.com/wencaiwulue/kubevpn/v2/pkg/daemon/rpc" @@ -198,33 +197,6 @@ func (svr *Server) redirectToSudoDaemon(req *rpc.ConnectRequest, resp rpc.Daemon svr.t = time.Now() svr.connect = connect - // hangup - if req.Foreground { - <-resp.Context().Done() - - client := svr.GetClient(false) - if client == nil { - return fmt.Errorf("daemon not start") - } - disconnect, err := client.Disconnect(context.Background(), &rpc.DisconnectRequest{ - ID: pointer.Int32(int32(0)), - }) - if err != nil { - log.Errorf("disconnect error: %v", err) - return err - } - for { - recv, err := disconnect.Recv() - if err == io.EOF { - break - } else if err != nil { - log.Error(err) - return err - } - log.Info(recv.Message) - } - } - return nil }