hotfix: do reverse opreation if operate cancelled (#465)

This commit is contained in:
naison
2025-03-12 18:36:12 +08:00
committed by GitHub
parent ee26880bf5
commit 6820dbb30d
3 changed files with 63 additions and 26 deletions

View File

@@ -1,6 +1,7 @@
package cmds
import (
"context"
"fmt"
"os"
@@ -153,7 +154,8 @@ func CmdClone(f cmdutil.Factory) *cobra.Command {
err = util.PrintGRPCStream[rpc.CloneResponse](resp)
if err != nil {
if status.Code(err) == codes.Canceled {
return nil
err = remove(cli, args)
return err
}
return err
}
@@ -176,3 +178,20 @@ func CmdClone(f cmdutil.Factory) *cobra.Command {
cmd.ValidArgsFunction = utilcomp.ResourceTypeAndNameCompletionFunc(f)
return cmd
}
func remove(cli rpc.DaemonClient, args []string) error {
resp, err := cli.Remove(context.Background(), &rpc.RemoveRequest{
Workloads: args,
})
if err != nil {
return err
}
err = util.PrintGRPCStream[rpc.DisconnectResponse](resp)
if err != nil {
if status.Code(err) == codes.Canceled {
return nil
}
return err
}
return nil
}

View File

@@ -116,7 +116,8 @@ func CmdConnect(f cmdutil.Factory) *cobra.Command {
err = util.PrintGRPCStream[rpc.ConnectResponse](resp)
if err != nil {
if status.Code(err) == codes.Canceled {
return nil
err = disconnect(cli, bytes, ns, sshConf)
return err
}
return err
}
@@ -124,20 +125,8 @@ func CmdConnect(f cmdutil.Factory) *cobra.Command {
util.Print(os.Stdout, config.Slogan)
} else {
<-cmd.Context().Done()
disconnect, err := cli.Disconnect(context.Background(), &rpc.DisconnectRequest{
KubeconfigBytes: ptr.To(string(bytes)),
Namespace: ptr.To(ns),
SshJump: sshConf.ToRPC(),
})
err = disconnect(cli, bytes, ns, sshConf)
if err != nil {
log.Errorf("Disconnect error: %v", err)
return err
}
err = util.PrintGRPCStream[rpc.DisconnectResponse](disconnect)
if err != nil {
if status.Code(err) == codes.Canceled {
return nil
}
return err
}
_, _ = fmt.Fprint(os.Stdout, "Disconnect completed")
@@ -153,3 +142,23 @@ func CmdConnect(f cmdutil.Factory) *cobra.Command {
pkgssh.AddSshFlags(cmd.Flags(), sshConf)
return cmd
}
func disconnect(cli rpc.DaemonClient, bytes []byte, ns string, sshConf *pkgssh.SshConfig) error {
resp, 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
}
err = util.PrintGRPCStream[rpc.DisconnectResponse](resp)
if err != nil {
if status.Code(err) == codes.Canceled {
return nil
}
return err
}
return nil
}

View File

@@ -147,7 +147,8 @@ func CmdProxy(f cmdutil.Factory) *cobra.Command {
err = util.PrintGRPCStream[rpc.ConnectResponse](client)
if err != nil {
if status.Code(err) == codes.Canceled {
return nil
err = leave(cli, args)
return err
}
return err
}
@@ -157,19 +158,10 @@ func CmdProxy(f cmdutil.Factory) *cobra.Command {
// leave from cluster resources
<-cmd.Context().Done()
stream, err := cli.Leave(context.Background(), &rpc.LeaveRequest{
Workloads: args,
})
err = leave(cli, args)
if err != nil {
return err
}
err = util.PrintGRPCStream[rpc.LeaveResponse](stream)
if err != nil {
if status.Code(err) == codes.Canceled {
return nil
}
return err
}
}
return nil
},
@@ -184,3 +176,20 @@ func CmdProxy(f cmdutil.Factory) *cobra.Command {
cmd.ValidArgsFunction = utilcomp.ResourceTypeAndNameCompletionFunc(f)
return cmd
}
func leave(cli rpc.DaemonClient, args []string) error {
stream, err := cli.Leave(context.Background(), &rpc.LeaveRequest{
Workloads: args,
})
if err != nil {
return err
}
err = util.PrintGRPCStream[rpc.LeaveResponse](stream)
if err != nil {
if status.Code(err) == codes.Canceled {
return nil
}
return err
}
return nil
}