mirror of
https://github.com/kubenetworks/kubevpn.git
synced 2025-12-24 11:51:13 +08:00
refactor: return error if get nil daemon client (#553)
This commit is contained in:
@@ -143,7 +143,10 @@ func CmdClone(f cmdutil.Factory) *cobra.Command {
|
|||||||
LocalDir: options.LocalDir,
|
LocalDir: options.LocalDir,
|
||||||
RemoteDir: options.RemoteDir,
|
RemoteDir: options.RemoteDir,
|
||||||
}
|
}
|
||||||
cli := daemon.GetClient(false)
|
cli, err := daemon.GetClient(false)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
resp, err := cli.Clone(cmd.Context(), req)
|
resp, err := cli.Clone(cmd.Context(), req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -55,7 +55,10 @@ func cmdConfigAdd(f cmdutil.Factory) *cobra.Command {
|
|||||||
Namespace: ns,
|
Namespace: ns,
|
||||||
SshJump: sshConf.ToRPC(),
|
SshJump: sshConf.ToRPC(),
|
||||||
}
|
}
|
||||||
cli := daemon.GetClient(false)
|
cli, err := daemon.GetClient(false)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
resp, err := cli.ConfigAdd(cmd.Context(), req)
|
resp, err := cli.ConfigAdd(cmd.Context(), req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -88,8 +91,11 @@ func cmdConfigRemove(f cmdutil.Factory) *cobra.Command {
|
|||||||
req := &rpc.ConfigRemoveRequest{
|
req := &rpc.ConfigRemoveRequest{
|
||||||
ClusterID: args[0],
|
ClusterID: args[0],
|
||||||
}
|
}
|
||||||
cli := daemon.GetClient(false)
|
cli, err := daemon.GetClient(false)
|
||||||
_, err := cli.ConfigRemove(cmd.Context(), req)
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
_, err = cli.ConfigRemove(cmd.Context(), req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -100,7 +100,10 @@ func CmdConnect(f cmdutil.Factory) *cobra.Command {
|
|||||||
Level: int32(util.If(config.Debug, log.DebugLevel, log.InfoLevel)),
|
Level: int32(util.If(config.Debug, log.DebugLevel, log.InfoLevel)),
|
||||||
}
|
}
|
||||||
// if is foreground, send to sudo daemon server
|
// if is foreground, send to sudo daemon server
|
||||||
cli := daemon.GetClient(false)
|
cli, err := daemon.GetClient(false)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
var resp grpc.ClientStream
|
var resp grpc.ClientStream
|
||||||
if lite {
|
if lite {
|
||||||
resp, err = cli.ConnectFork(cmd.Context(), req)
|
resp, err = cli.ConnectFork(cmd.Context(), req)
|
||||||
|
|||||||
@@ -61,7 +61,11 @@ func CmdDisconnect(f cmdutil.Factory) *cobra.Command {
|
|||||||
}
|
}
|
||||||
ids = pointer.Int32(int32(integer))
|
ids = pointer.Int32(int32(integer))
|
||||||
}
|
}
|
||||||
client, err := daemon.GetClient(false).Disconnect(
|
cli, err := daemon.GetClient(false)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
client, err := cli.Disconnect(
|
||||||
cmd.Context(),
|
cmd.Context(),
|
||||||
&rpc.DisconnectRequest{
|
&rpc.DisconnectRequest{
|
||||||
ID: ids,
|
ID: ids,
|
||||||
|
|||||||
@@ -49,7 +49,11 @@ func CmdGet(f cmdutil.Factory) *cobra.Command {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
client, err := daemon.GetClient(true).Get(
|
cli, err := daemon.GetClient(true)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
client, err := cli.Get(
|
||||||
cmd.Context(),
|
cmd.Context(),
|
||||||
&rpc.GetRequest{
|
&rpc.GetRequest{
|
||||||
Namespace: ns,
|
Namespace: ns,
|
||||||
|
|||||||
@@ -38,7 +38,11 @@ func CmdLeave(f cmdutil.Factory) *cobra.Command {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
resp, err := daemon.GetClient(false).Leave(cmd.Context(), &rpc.LeaveRequest{
|
cli, err := daemon.GetClient(false)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
resp, err := cli.Leave(cmd.Context(), &rpc.LeaveRequest{
|
||||||
Namespace: ns,
|
Namespace: ns,
|
||||||
Workloads: args,
|
Workloads: args,
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -25,7 +25,11 @@ func CmdList(f cmdutil.Factory) *cobra.Command {
|
|||||||
return daemon.StartupDaemon(cmd.Context())
|
return daemon.StartupDaemon(cmd.Context())
|
||||||
},
|
},
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
client, err := daemon.GetClient(true).List(
|
cli, err := daemon.GetClient(true)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
client, err := cli.List(
|
||||||
cmd.Context(),
|
cmd.Context(),
|
||||||
&rpc.ListRequest{},
|
&rpc.ListRequest{},
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -34,7 +34,11 @@ func CmdLogs(f cmdutil.Factory) *cobra.Command {
|
|||||||
return daemon.StartupDaemon(cmd.Context())
|
return daemon.StartupDaemon(cmd.Context())
|
||||||
},
|
},
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
client, err := daemon.GetClient(true).Logs(cmd.Context(), req)
|
cli, err := daemon.GetClient(true)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
client, err := cli.Logs(cmd.Context(), req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -122,8 +122,11 @@ func CmdProxy(f cmdutil.Factory) *cobra.Command {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// todo 将 doConnect 方法封装?内部使用 client 发送到daemon?
|
// todo 将 doConnect 方法封装?内部使用 client 发送到daemon?
|
||||||
cli := daemon.GetClient(false)
|
cli, err := daemon.GetClient(false)
|
||||||
client, err := cli.Proxy(
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
resp, err := cli.Proxy(
|
||||||
cmd.Context(),
|
cmd.Context(),
|
||||||
&rpc.ProxyRequest{
|
&rpc.ProxyRequest{
|
||||||
KubeconfigBytes: string(bytes),
|
KubeconfigBytes: string(bytes),
|
||||||
@@ -145,7 +148,7 @@ func CmdProxy(f cmdutil.Factory) *cobra.Command {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
err = util.PrintGRPCStream[rpc.ConnectResponse](client)
|
err = util.PrintGRPCStream[rpc.ConnectResponse](resp)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if status.Code(err) == codes.Canceled {
|
if status.Code(err) == codes.Canceled {
|
||||||
err = leave(cli, ns, args)
|
err = leave(cli, ns, args)
|
||||||
|
|||||||
@@ -40,9 +40,9 @@ func CmdQuit(f cmdutil.Factory) *cobra.Command {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func quit(ctx context.Context, isSudo bool) error {
|
func quit(ctx context.Context, isSudo bool) error {
|
||||||
cli := daemon.GetClient(isSudo)
|
cli, err := daemon.GetClient(isSudo)
|
||||||
if cli == nil {
|
if err != nil {
|
||||||
return nil
|
return err
|
||||||
}
|
}
|
||||||
client, err := cli.Quit(ctx, &rpc.QuitRequest{})
|
client, err := cli.Quit(ctx, &rpc.QuitRequest{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -32,13 +32,17 @@ func CmdRemove(f cmdutil.Factory) *cobra.Command {
|
|||||||
return daemon.StartupDaemon(cmd.Context())
|
return daemon.StartupDaemon(cmd.Context())
|
||||||
},
|
},
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
leave, err := daemon.GetClient(false).Remove(cmd.Context(), &rpc.RemoveRequest{
|
cli, err := daemon.GetClient(false)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
resp, err := cli.Remove(cmd.Context(), &rpc.RemoveRequest{
|
||||||
Workloads: args,
|
Workloads: args,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
err = util.PrintGRPCStream[rpc.RemoveResponse](leave)
|
err = util.PrintGRPCStream[rpc.RemoveResponse](resp)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if status.Code(err) == codes.Canceled {
|
if status.Code(err) == codes.Canceled {
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@@ -56,7 +56,10 @@ func CmdReset(f cmdutil.Factory) *cobra.Command {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
cli := daemon.GetClient(false)
|
cli, err := daemon.GetClient(false)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
req := &rpc.ResetRequest{
|
req := &rpc.ResetRequest{
|
||||||
KubeconfigBytes: string(bytes),
|
KubeconfigBytes: string(bytes),
|
||||||
Namespace: ns,
|
Namespace: ns,
|
||||||
|
|||||||
@@ -31,7 +31,11 @@ func CmdSSHDaemon(cmdutil.Factory) *cobra.Command {
|
|||||||
return err
|
return err
|
||||||
},
|
},
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
client, err := daemon.GetClient(true).SshStart(
|
cli, err := daemon.GetClient(true)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
resp, err := cli.SshStart(
|
||||||
cmd.Context(),
|
cmd.Context(),
|
||||||
&rpc.SshStartRequest{
|
&rpc.SshStartRequest{
|
||||||
ClientIP: clientIP,
|
ClientIP: clientIP,
|
||||||
@@ -40,7 +44,7 @@ func CmdSSHDaemon(cmdutil.Factory) *cobra.Command {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
_, err = fmt.Fprint(os.Stdout, client.ServerIP)
|
_, err = fmt.Fprint(os.Stdout, resp.ServerIP)
|
||||||
return err
|
return err
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -80,7 +80,11 @@ func CmdStatus(f cmdutil.Factory) *cobra.Command {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
resp, err := daemon.GetClient(false).Status(
|
cli, err := daemon.GetClient(false)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
resp, err := cli.Status(
|
||||||
cmd.Context(),
|
cmd.Context(),
|
||||||
&rpc.StatusRequest{
|
&rpc.StatusRequest{
|
||||||
ClusterIDs: clusterIDs,
|
ClusterIDs: clusterIDs,
|
||||||
|
|||||||
@@ -58,8 +58,11 @@ func CmdUninstall(f cmdutil.Factory) *cobra.Command {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
cli := daemon.GetClient(false)
|
cli, err := daemon.GetClient(false)
|
||||||
disconnect, err := cli.Disconnect(cmd.Context(), &rpc.DisconnectRequest{
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
disconnectResp, err := cli.Disconnect(cmd.Context(), &rpc.DisconnectRequest{
|
||||||
KubeconfigBytes: ptr.To(string(bytes)),
|
KubeconfigBytes: ptr.To(string(bytes)),
|
||||||
Namespace: ptr.To(ns),
|
Namespace: ptr.To(ns),
|
||||||
SshJump: sshConf.ToRPC(),
|
SshJump: sshConf.ToRPC(),
|
||||||
@@ -67,7 +70,7 @@ func CmdUninstall(f cmdutil.Factory) *cobra.Command {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
plog.G(cmd.Context()).Warnf("Failed to disconnect from cluter: %v", err)
|
plog.G(cmd.Context()).Warnf("Failed to disconnect from cluter: %v", err)
|
||||||
} else {
|
} else {
|
||||||
_ = util.PrintGRPCStream[rpc.DisconnectResponse](disconnect)
|
_ = util.PrintGRPCStream[rpc.DisconnectResponse](disconnectResp)
|
||||||
}
|
}
|
||||||
|
|
||||||
req := &rpc.UninstallRequest{
|
req := &rpc.UninstallRequest{
|
||||||
|
|||||||
@@ -64,12 +64,13 @@ func init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getDaemonVersion() string {
|
func getDaemonVersion() string {
|
||||||
cli := daemon.GetClient(false)
|
cli, err := daemon.GetClient(false)
|
||||||
if cli != nil {
|
if err != nil {
|
||||||
version, err := cli.Version(context.Background(), &rpc.VersionRequest{})
|
return "unknown"
|
||||||
if err == nil {
|
|
||||||
return version.Version
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return "unknown"
|
version, err := cli.Version(context.Background(), &rpc.VersionRequest{})
|
||||||
|
if err != nil {
|
||||||
|
return "unknown"
|
||||||
|
}
|
||||||
|
return version.Version
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,10 @@ func (svr *Server) Clone(req *rpc.CloneRequest, resp rpc.Daemon_CloneServer) (er
|
|||||||
Level: req.Level,
|
Level: req.Level,
|
||||||
OriginKubeconfigPath: req.OriginKubeconfigPath,
|
OriginKubeconfigPath: req.OriginKubeconfigPath,
|
||||||
}
|
}
|
||||||
cli := svr.GetClient(false)
|
cli, err := svr.GetClient(false)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
connResp, err := cli.Connect(resp.Context(), connReq)
|
connResp, err := cli.Connect(resp.Context(), connReq)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -2,9 +2,9 @@ package action
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
|
||||||
"io"
|
"io"
|
||||||
|
|
||||||
|
"github.com/pkg/errors"
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
"github.com/spf13/pflag"
|
"github.com/spf13/pflag"
|
||||||
|
|
||||||
@@ -84,9 +84,9 @@ func (svr *Server) ConnectFork(req *rpc.ConnectRequest, resp rpc.Daemon_ConnectF
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (svr *Server) redirectConnectForkToSudoDaemon(req *rpc.ConnectRequest, resp rpc.Daemon_ConnectServer, logger *log.Logger) (err error) {
|
func (svr *Server) redirectConnectForkToSudoDaemon(req *rpc.ConnectRequest, resp rpc.Daemon_ConnectServer, logger *log.Logger) (err error) {
|
||||||
cli := svr.GetClient(true)
|
cli, err := svr.GetClient(true)
|
||||||
if cli == nil {
|
if err != nil {
|
||||||
return fmt.Errorf("sudo daemon not start")
|
return errors.Wrap(err, "sudo daemon not start")
|
||||||
}
|
}
|
||||||
var sshConf = ssh.ParseSshFromRPC(req.SshJump)
|
var sshConf = ssh.ParseSshFromRPC(req.SshJump)
|
||||||
file, err := util.ConvertToTempKubeconfigFile([]byte(req.KubeconfigBytes))
|
file, err := util.ConvertToTempKubeconfigFile([]byte(req.KubeconfigBytes))
|
||||||
|
|||||||
@@ -2,10 +2,10 @@ package action
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
|
||||||
"io"
|
"io"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/pkg/errors"
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
"github.com/spf13/pflag"
|
"github.com/spf13/pflag"
|
||||||
"google.golang.org/grpc/codes"
|
"google.golang.org/grpc/codes"
|
||||||
@@ -99,9 +99,9 @@ func (svr *Server) Connect(req *rpc.ConnectRequest, resp rpc.Daemon_ConnectServe
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (svr *Server) redirectToSudoDaemon(req *rpc.ConnectRequest, resp rpc.Daemon_ConnectServer, logger *log.Logger) (e error) {
|
func (svr *Server) redirectToSudoDaemon(req *rpc.ConnectRequest, resp rpc.Daemon_ConnectServer, logger *log.Logger) (e error) {
|
||||||
cli := svr.GetClient(true)
|
cli, err := svr.GetClient(true)
|
||||||
if cli == nil {
|
if err != nil {
|
||||||
return fmt.Errorf("sudo daemon not start")
|
return errors.Wrap(err, "sudo daemon not start")
|
||||||
}
|
}
|
||||||
var sshConf = ssh.ParseSshFromRPC(req.SshJump)
|
var sshConf = ssh.ParseSshFromRPC(req.SshJump)
|
||||||
file, err := util.ConvertToTempKubeconfigFile([]byte(req.KubeconfigBytes))
|
file, err := util.ConvertToTempKubeconfigFile([]byte(req.KubeconfigBytes))
|
||||||
|
|||||||
@@ -2,10 +2,10 @@ package action
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
|
||||||
"io"
|
"io"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/pkg/errors"
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
"github.com/spf13/pflag"
|
"github.com/spf13/pflag"
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
@@ -104,9 +104,9 @@ func (svr *Server) Disconnect(req *rpc.DisconnectRequest, resp rpc.Daemon_Discon
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !svr.IsSudo {
|
if !svr.IsSudo {
|
||||||
cli := svr.GetClient(true)
|
cli, err := svr.GetClient(true)
|
||||||
if cli == nil {
|
if err != nil {
|
||||||
return fmt.Errorf("sudo daemon not start")
|
return errors.Wrap(err, "sudo daemon not start")
|
||||||
}
|
}
|
||||||
connResp, err := cli.Disconnect(resp.Context(), req)
|
connResp, err := cli.Disconnect(resp.Context(), req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -149,8 +149,8 @@ func disconnectByKubeConfig(ctx context.Context, svr *Server, kubeconfigBytes st
|
|||||||
}
|
}
|
||||||
|
|
||||||
func disconnect(ctx context.Context, svr *Server, connect *handler.ConnectOptions) {
|
func disconnect(ctx context.Context, svr *Server, connect *handler.ConnectOptions) {
|
||||||
client := svr.GetClient(false)
|
_, err := svr.GetClient(false)
|
||||||
if client == nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if svr.connect != nil {
|
if svr.connect != nil {
|
||||||
|
|||||||
@@ -2,9 +2,9 @@ package action
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
|
||||||
"io"
|
"io"
|
||||||
|
|
||||||
|
"github.com/pkg/errors"
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
"github.com/spf13/pflag"
|
"github.com/spf13/pflag"
|
||||||
"k8s.io/utils/ptr"
|
"k8s.io/utils/ptr"
|
||||||
@@ -67,9 +67,9 @@ func (svr *Server) Proxy(req *rpc.ProxyRequest, resp rpc.Daemon_ProxyServer) (e
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
daemonClient := svr.GetClient(false)
|
cli, err := svr.GetClient(false)
|
||||||
if daemonClient == nil {
|
if err != nil {
|
||||||
return fmt.Errorf("daemon is not avaliable")
|
return errors.Wrap(err, "daemon is not available")
|
||||||
}
|
}
|
||||||
|
|
||||||
connectNs, err := util.DetectConnectNamespace(ctx, connect.GetFactory(), req.ConnectNamespace)
|
connectNs, err := util.DetectConnectNamespace(ctx, connect.GetFactory(), req.ConnectNamespace)
|
||||||
@@ -92,7 +92,7 @@ func (svr *Server) Proxy(req *rpc.ProxyRequest, resp rpc.Daemon_ProxyServer) (e
|
|||||||
} else {
|
} else {
|
||||||
plog.G(ctx).Infof("Disconnecting from another cluster...")
|
plog.G(ctx).Infof("Disconnecting from another cluster...")
|
||||||
var disconnectResp rpc.Daemon_DisconnectClient
|
var disconnectResp rpc.Daemon_DisconnectClient
|
||||||
disconnectResp, err = daemonClient.Disconnect(ctx, &rpc.DisconnectRequest{
|
disconnectResp, err = cli.Disconnect(ctx, &rpc.DisconnectRequest{
|
||||||
ID: ptr.To[int32](0),
|
ID: ptr.To[int32](0),
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -114,7 +114,7 @@ func (svr *Server) Proxy(req *rpc.ProxyRequest, resp rpc.Daemon_ProxyServer) (e
|
|||||||
if svr.connect == nil {
|
if svr.connect == nil {
|
||||||
plog.G(ctx).Debugf("Connectting to cluster")
|
plog.G(ctx).Debugf("Connectting to cluster")
|
||||||
var connResp rpc.Daemon_ConnectClient
|
var connResp rpc.Daemon_ConnectClient
|
||||||
connResp, err = daemonClient.Connect(ctx, convert(req))
|
connResp, err = cli.Connect(ctx, convert(req))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ type Server struct {
|
|||||||
rpc.UnimplementedDaemonServer
|
rpc.UnimplementedDaemonServer
|
||||||
|
|
||||||
Cancel func()
|
Cancel func()
|
||||||
GetClient func(isSudo bool) rpc.DaemonClient
|
GetClient func(isSudo bool) (rpc.DaemonClient, error)
|
||||||
IsSudo bool
|
IsSudo bool
|
||||||
LogFile *lumberjack.Logger
|
LogFile *lumberjack.Logger
|
||||||
Lock sync.Mutex
|
Lock sync.Mutex
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
pkgerr "github.com/pkg/errors"
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
"google.golang.org/grpc/credentials/insecure"
|
"google.golang.org/grpc/credentials/insecure"
|
||||||
"google.golang.org/grpc/health/grpc_health_v1"
|
"google.golang.org/grpc/health/grpc_health_v1"
|
||||||
@@ -23,22 +24,22 @@ import (
|
|||||||
|
|
||||||
var daemonClient, sudoDaemonClient rpc.DaemonClient
|
var daemonClient, sudoDaemonClient rpc.DaemonClient
|
||||||
|
|
||||||
func GetClient(isSudo bool) (cli rpc.DaemonClient) {
|
func GetClient(isSudo bool) (cli rpc.DaemonClient, err error) {
|
||||||
sockPath := config.GetSockPath(isSudo)
|
sockPath := config.GetSockPath(isSudo)
|
||||||
if _, err := os.Stat(sockPath); errors.Is(err, os.ErrNotExist) {
|
if _, err = os.Stat(sockPath); errors.Is(err, os.ErrNotExist) {
|
||||||
return nil
|
return nil, err
|
||||||
}
|
}
|
||||||
if isSudo && sudoDaemonClient != nil {
|
if isSudo && sudoDaemonClient != nil {
|
||||||
return sudoDaemonClient
|
return sudoDaemonClient, nil
|
||||||
}
|
}
|
||||||
if !isSudo && daemonClient != nil {
|
if !isSudo && daemonClient != nil {
|
||||||
return daemonClient
|
return daemonClient, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
conn, err := grpc.DialContext(ctx, "unix:"+sockPath, grpc.WithTransportCredentials(insecure.NewCredentials()))
|
conn, err := grpc.NewClient("unix:"+sockPath, grpc.WithTransportCredentials(insecure.NewCredentials()))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil
|
return nil, err
|
||||||
}
|
}
|
||||||
defer func() {
|
defer func() {
|
||||||
if cli == nil {
|
if cli == nil {
|
||||||
@@ -50,10 +51,10 @@ func GetClient(isSudo bool) (cli rpc.DaemonClient) {
|
|||||||
var response *grpc_health_v1.HealthCheckResponse
|
var response *grpc_health_v1.HealthCheckResponse
|
||||||
response, err = healthClient.Check(ctx, &grpc_health_v1.HealthCheckRequest{})
|
response, err = healthClient.Check(ctx, &grpc_health_v1.HealthCheckRequest{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil
|
return nil, err
|
||||||
}
|
}
|
||||||
if response.Status != grpc_health_v1.HealthCheckResponse_SERVING {
|
if response.Status != grpc_health_v1.HealthCheckResponse_SERVING {
|
||||||
return nil
|
return nil, fmt.Errorf("health check failed: %v", response.Status)
|
||||||
}
|
}
|
||||||
|
|
||||||
cli = rpc.NewDaemonClient(conn)
|
cli = rpc.NewDaemonClient(conn)
|
||||||
@@ -66,7 +67,7 @@ func GetClient(isSudo bool) (cli rpc.DaemonClient) {
|
|||||||
var quitStream rpc.Daemon_QuitClient
|
var quitStream rpc.Daemon_QuitClient
|
||||||
quitStream, err = cli.Quit(ctx, &rpc.QuitRequest{})
|
quitStream, err = cli.Quit(ctx, &rpc.QuitRequest{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil
|
return nil, err
|
||||||
}
|
}
|
||||||
err = util.PrintGRPCStream[rpc.QuitResponse](quitStream, nil)
|
err = util.PrintGRPCStream[rpc.QuitResponse](quitStream, nil)
|
||||||
return
|
return
|
||||||
@@ -77,7 +78,7 @@ func GetClient(isSudo bool) (cli rpc.DaemonClient) {
|
|||||||
} else {
|
} else {
|
||||||
daemonClient = cli
|
daemonClient = cli
|
||||||
}
|
}
|
||||||
return cli
|
return cli, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetClientWithoutCache(ctx context.Context, isSudo bool) (cli rpc.DaemonClient, conn *grpc.ClientConn, err error) {
|
func GetClientWithoutCache(ctx context.Context, isSudo bool) (cli rpc.DaemonClient, conn *grpc.ClientConn, err error) {
|
||||||
@@ -86,7 +87,7 @@ func GetClientWithoutCache(ctx context.Context, isSudo bool) (cli rpc.DaemonClie
|
|||||||
if errors.Is(err, os.ErrNotExist) {
|
if errors.Is(err, os.ErrNotExist) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
conn, err = grpc.DialContext(ctx, "unix:"+sockPath, grpc.WithTransportCredentials(insecure.NewCredentials()))
|
conn, err = grpc.NewClient("unix:"+sockPath, grpc.WithTransportCredentials(insecure.NewCredentials()))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -102,6 +103,7 @@ func GetClientWithoutCache(ctx context.Context, isSudo bool) (cli rpc.DaemonClie
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if response.Status != grpc_health_v1.HealthCheckResponse_SERVING {
|
if response.Status != grpc_health_v1.HealthCheckResponse_SERVING {
|
||||||
|
err = fmt.Errorf("health check failed: %v", response.Status)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
cli = rpc.NewDaemonClient(conn)
|
cli = rpc.NewDaemonClient(conn)
|
||||||
@@ -120,14 +122,14 @@ func StartupDaemon(ctx context.Context, path ...string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
// normal daemon
|
// normal daemon
|
||||||
if daemonClient = GetClient(false); daemonClient == nil {
|
if daemonClient, err = GetClient(false); daemonClient == nil {
|
||||||
if err = runDaemon(ctx, exe, false); err != nil {
|
if err = runDaemon(ctx, exe, false); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// sudo daemon
|
// sudo daemon
|
||||||
if sudoDaemonClient = GetClient(true); sudoDaemonClient == nil {
|
if sudoDaemonClient, err = GetClient(true); sudoDaemonClient == nil {
|
||||||
if err = runDaemon(ctx, exe, true); err != nil {
|
if err = runDaemon(ctx, exe, true); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -136,13 +138,13 @@ func StartupDaemon(ctx context.Context, path ...string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func runDaemon(ctx context.Context, exe string, isSudo bool) error {
|
func runDaemon(ctx context.Context, exe string, isSudo bool) error {
|
||||||
cli := GetClient(isSudo)
|
_, err := GetClient(isSudo)
|
||||||
if cli != nil {
|
if err == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
pidPath := config.GetPidPath(isSudo)
|
pidPath := config.GetPidPath(isSudo)
|
||||||
err := os.Remove(pidPath)
|
err = os.Remove(pidPath)
|
||||||
if err != nil && !errors.Is(err, os.ErrNotExist) {
|
if err != nil && !errors.Is(err, os.ErrNotExist) {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -166,9 +168,9 @@ func runDaemon(ctx context.Context, exe string, isSudo bool) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
client := GetClient(isSudo)
|
_, err = GetClient(isSudo)
|
||||||
if client == nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to get daemon server client")
|
return pkgerr.Wrap(err, "failed to get daemon server client")
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import (
|
|||||||
typescontainer "github.com/docker/docker/api/types/container"
|
typescontainer "github.com/docker/docker/api/types/container"
|
||||||
"github.com/docker/go-connections/nat"
|
"github.com/docker/go-connections/nat"
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
|
pkgerr "github.com/pkg/errors"
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||||
@@ -91,9 +92,9 @@ func (option *Options) Main(ctx context.Context, sshConfig *pkgssh.SshConfig, co
|
|||||||
// Connect to cluster network on docker container or host
|
// Connect to cluster network on docker container or host
|
||||||
func (option *Options) Connect(ctx context.Context, sshConfig *pkgssh.SshConfig, imagePullSecretName string, portBindings nat.PortMap, connectNamespace string) error {
|
func (option *Options) Connect(ctx context.Context, sshConfig *pkgssh.SshConfig, imagePullSecretName string, portBindings nat.PortMap, connectNamespace string) error {
|
||||||
if option.ConnectMode == ConnectModeHost {
|
if option.ConnectMode == ConnectModeHost {
|
||||||
daemonCli := daemon.GetClient(false)
|
cli, err := daemon.GetClient(false)
|
||||||
if daemonCli == nil {
|
if err != nil {
|
||||||
return fmt.Errorf("get nil daemon client")
|
return pkgerr.Wrap(err, "get nil daemon client")
|
||||||
}
|
}
|
||||||
kubeConfigBytes, ns, err := util.ConvertToKubeConfigBytes(option.factory)
|
kubeConfigBytes, ns, err := util.ConvertToKubeConfigBytes(option.factory)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -121,7 +122,7 @@ func (option *Options) Connect(ctx context.Context, sshConfig *pkgssh.SshConfig,
|
|||||||
ConnectNamespace: connectNamespace,
|
ConnectNamespace: connectNamespace,
|
||||||
}
|
}
|
||||||
option.AddRollbackFunc(func() error {
|
option.AddRollbackFunc(func() error {
|
||||||
resp, err := daemonCli.Disconnect(ctx, &rpc.DisconnectRequest{
|
resp, err := cli.Disconnect(ctx, &rpc.DisconnectRequest{
|
||||||
KubeconfigBytes: ptr.To(string(kubeConfigBytes)),
|
KubeconfigBytes: ptr.To(string(kubeConfigBytes)),
|
||||||
Namespace: ptr.To(ns),
|
Namespace: ptr.To(ns),
|
||||||
SshJump: sshConfig.ToRPC(),
|
SshJump: sshConfig.ToRPC(),
|
||||||
@@ -133,7 +134,7 @@ func (option *Options) Connect(ctx context.Context, sshConfig *pkgssh.SshConfig,
|
|||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
var resp rpc.Daemon_ProxyClient
|
var resp rpc.Daemon_ProxyClient
|
||||||
resp, err = daemonCli.Proxy(ctx, req)
|
resp, err = cli.Proxy(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
plog.G(ctx).Errorf("Connect to cluster error: %s", err.Error())
|
plog.G(ctx).Errorf("Connect to cluster error: %s", err.Error())
|
||||||
return err
|
return err
|
||||||
|
|||||||
Reference in New Issue
Block a user