fix(connect): fix connect foreground exit failed (#214)

* fix(connect): fix connect foreground exit failed

* fix(*): fix lint

* fix: disconnect by kubeconfig instead of id

---------

Co-authored-by: 江鹏飞 <jiangpengfei.jiangpf@bytedance.com>
This commit is contained in:
Pengfei Jiang
2024-04-12 23:47:14 +08:00
committed by GitHub
parent acd4de313f
commit 52f1d38e56
2 changed files with 24 additions and 28 deletions

View File

@@ -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
},

View File

@@ -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
}