From 4aeee5f8d869d6cf734bbb091c3013e8dcc92f39 Mon Sep 17 00:00:00 2001 From: naison <895703375@qq.com> Date: Sat, 22 Jun 2024 10:33:37 +0800 Subject: [PATCH] feat: discard syncthing log (#272) --- pkg/config/syncthing.go | 3 +++ pkg/handler/clone.go | 12 ++++++------ pkg/util/elevate_others.go | 6 ++++-- pkg/util/elevate_windows.go | 3 +++ pkg/util/elevatecheck_others.go | 2 +- pkg/util/elevatecheck_windows.go | 6 +++++- 6 files changed, 22 insertions(+), 10 deletions(-) diff --git a/pkg/config/syncthing.go b/pkg/config/syncthing.go index 944b0e41..d4d4ec31 100644 --- a/pkg/config/syncthing.go +++ b/pkg/config/syncthing.go @@ -12,6 +12,9 @@ const ( SyncthingGUIDir = "gui" DefaultRemoteDir = "/kubevpn-data" + + // EnvDisableSyncthingLog disable syncthing log, because it can not set output writer, only write os.Stdout or io.Discard + EnvDisableSyncthingLog = "LOGGER_DISCARD" ) var LocalCert tls.Certificate diff --git a/pkg/handler/clone.go b/pkg/handler/clone.go index dc3fe326..fd36eec4 100644 --- a/pkg/handler/clone.go +++ b/pkg/handler/clone.go @@ -6,7 +6,6 @@ import ( "fmt" "net" "net/url" - "os" "path/filepath" "sort" "strconv" @@ -132,6 +131,10 @@ func (d *CloneOptions) SetContext(ctx context.Context) { * 4) modify podTempSpec inject kubevpn container */ func (d *CloneOptions) DoClone(ctx context.Context, kubeconfigJsonBytes []byte) error { + var args []string + if len(d.Headers) != 0 { + args = append(args, "--headers", labels.Set(d.Headers).String()) + } for _, workload := range d.Workloads { log.Infof("clone workload %s", workload) object, err := util.GetUnstructuredObject(d.factory, d.Namespace, workload) @@ -281,17 +284,16 @@ func (d *CloneOptions) DoClone(ctx context.Context, kubeconfigJsonBytes []byte) Name: config.ContainerSidecarVPN, Image: config.Image, // https://stackoverflow.com/questions/32918849/what-process-signal-does-pod-receive-when-executing-kubectl-rolling-update - Command: []string{ + Command: append([]string{ "kubevpn", "proxy", workload, "--kubeconfig", "/tmp/.kube/" + config.KUBECONFIG, "--namespace", d.Namespace, - "--headers", labels.Set(d.Headers).String(), "--image", config.Image, "--engine", string(d.Engine), "--foreground", - }, + }, args...), Env: []v1.EnvVar{{ Name: config.EnvStartSudoKubeVPNByKubeVPN, Value: "1", @@ -411,8 +413,6 @@ func (d *CloneOptions) DoClone(ctx context.Context, kubeconfigJsonBytes []byte) remoteAddr := net.JoinHostPort(list[0].Status.PodIP, strconv.Itoa(libconfig.DefaultTCPPort)) localPort, _ := util.GetAvailableTCPPortOrDie() localAddr := net.JoinHostPort("127.0.0.1", strconv.Itoa(localPort)) - // disable synchting log, because it can not set output writer, only write std.Out or discard - _ = os.Setenv("LOGGER_DISCARD", "1") err = syncthing.StartClient(d.ctx, d.LocalDir, localAddr, remoteAddr) if err != nil { return err diff --git a/pkg/util/elevate_others.go b/pkg/util/elevate_others.go index 0596b595..3978c18d 100644 --- a/pkg/util/elevate_others.go +++ b/pkg/util/elevate_others.go @@ -10,6 +10,8 @@ import ( log "github.com/sirupsen/logrus" "k8s.io/client-go/tools/clientcmd" + + "github.com/wencaiwulue/kubevpn/v2/pkg/config" ) func RunCmdWithElevated(exe string, args []string) error { @@ -25,7 +27,7 @@ func RunCmdWithElevated(exe string, args []string) error { cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr cmd.Stdin = os.Stdin - cmd.Env = append(os.Environ(), envStartSudoKubeVPNByKubeVPN+"=1") + cmd.Env = append(os.Environ(), envStartSudoKubeVPNByKubeVPN+"=1", config.EnvDisableSyncthingLog+"=1") err := cmd.Start() if err != nil { return err @@ -52,7 +54,7 @@ func RunCmd(exe string, args []string) error { cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr cmd.Stdin = os.Stdin - cmd.Env = append(os.Environ(), envStartSudoKubeVPNByKubeVPN+"=1") + cmd.Env = append(os.Environ(), envStartSudoKubeVPNByKubeVPN+"=1", config.EnvDisableSyncthingLog+"=1") err := cmd.Start() if err != nil { return err diff --git a/pkg/util/elevate_windows.go b/pkg/util/elevate_windows.go index 117db554..f1d22dee 100644 --- a/pkg/util/elevate_windows.go +++ b/pkg/util/elevate_windows.go @@ -11,6 +11,8 @@ import ( "github.com/sirupsen/logrus" "golang.org/x/sys/windows" + + "github.com/wencaiwulue/kubevpn/v2/pkg/config" ) // ref https://stackoverflow.com/questions/31558066/how-to-ask-for-administer-privileges-on-windows-with-go @@ -42,6 +44,7 @@ func RunCmdWithElevated(exe string, arg []string) error { //https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-showwindow var showCmd int32 = 0 //SW_NORMAL + os.Setenv(config.EnvDisableSyncthingLog, "1") err = windows.ShellExecute(0, verbPtr, exePtr, argPtr, cwdPtr, showCmd) if err != nil { logrus.Warn(err) diff --git a/pkg/util/elevatecheck_others.go b/pkg/util/elevatecheck_others.go index 72160641..d9c9f76f 100644 --- a/pkg/util/elevatecheck_others.go +++ b/pkg/util/elevatecheck_others.go @@ -33,7 +33,7 @@ func RunWithElevated() { cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr cmd.Stdin = os.Stdin - cmd.Env = append(os.Environ(), envStartSudoKubeVPNByKubeVPN+"=1") + cmd.Env = append(os.Environ(), envStartSudoKubeVPNByKubeVPN+"=1", config.EnvDisableSyncthingLog+"=1") // while send single CTRL+C, command will quit immediately, but output will cut off and print util quit final // so, mute single CTRL+C, let inner command handle single only go func() { diff --git a/pkg/util/elevatecheck_windows.go b/pkg/util/elevatecheck_windows.go index dd8d5406..4f99c967 100644 --- a/pkg/util/elevatecheck_windows.go +++ b/pkg/util/elevatecheck_windows.go @@ -11,6 +11,8 @@ import ( "github.com/sirupsen/logrus" "golang.org/x/sys/windows" + + "github.com/wencaiwulue/kubevpn/v2/pkg/config" ) // ref https://stackoverflow.com/questions/31558066/how-to-ask-for-administer-privileges-on-windows-with-go @@ -27,6 +29,7 @@ func RunWithElevated() { var showCmd int32 = 1 //SW_NORMAL + os.Setenv(config.EnvDisableSyncthingLog, "1") err := windows.ShellExecute(0, verbPtr, exePtr, argPtr, cwdPtr, showCmd) if err != nil { logrus.Warn(err) @@ -45,7 +48,8 @@ func RunWithElevatedInnerExec() error { join := strings.Join(append([]string{executable}, os.Args[1:]...), " ") // Powershell Start C:\Users\naison\Desktop\kubevpn-windows-amd64.exe -Verb Runas -Wait -WindowStyle Hidden c, _ := syscall.UTF16PtrFromString(fmt.Sprintf(`%s Start "%s" -Verb Runas`, path, join)) - err = windows.CreateProcess(nil, c, nil, nil, true, windows.INHERIT_PARENT_AFFINITY, nil, nil, &si, &pi) + env, _ := syscall.UTF16PtrFromString(config.EnvDisableSyncthingLog + "=1") + err = windows.CreateProcess(nil, c, nil, nil, true, windows.INHERIT_PARENT_AFFINITY, env, nil, &si, &pi) if err != nil { return err }