This is an automated email from the ASF dual-hosted git repository.

miaoliyao pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/shardingsphere-on-cloud.git


The following commit(s) were added to refs/heads/main by this push:
     new 281d8fe  feat(pitr): pirt agent server support load env file (#319)
281d8fe is described below

commit 281d8fe5b51afcfa4ec5a1e01fa2228ed7aeb43e
Author: Xu-Wentao <[email protected]>
AuthorDate: Sun Apr 23 17:21:44 2023 +0800

    feat(pitr): pirt agent server support load env file (#319)
---
 pitr/agent/go.mod               |  1 +
 pitr/agent/go.sum               |  2 ++
 pitr/agent/main.go              | 23 +++++++++++++++++------
 pitr/agent/pkg/cmds/cmd.go      | 24 ++++++++++++++++++++++++
 pitr/agent/pkg/cmds/cmd_test.go | 17 +++++++++++++++++
 5 files changed, 61 insertions(+), 6 deletions(-)

diff --git a/pitr/agent/go.mod b/pitr/agent/go.mod
index f177091..82bfb84 100644
--- a/pitr/agent/go.mod
+++ b/pitr/agent/go.mod
@@ -6,6 +6,7 @@ require (
        gitee.com/opengauss/openGauss-connector-go-pq v1.0.4
        github.com/dlclark/regexp2 v1.8.0
        github.com/gofiber/fiber/v2 v2.42.0
+       github.com/joho/godotenv v1.5.1
        github.com/onsi/ginkgo/v2 v2.8.0
        github.com/onsi/gomega v1.26.0
        go.uber.org/zap v1.24.0
diff --git a/pitr/agent/go.sum b/pitr/agent/go.sum
index 8fe333e..35a3b4c 100644
--- a/pitr/agent/go.sum
+++ b/pitr/agent/go.sum
@@ -43,6 +43,8 @@ github.com/google/go-cmp v0.5.9 
h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
 github.com/google/go-cmp v0.5.9/go.mod 
h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
 github.com/google/uuid v1.3.0/go.mod 
h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
+github.com/joho/godotenv v1.5.1/go.mod 
h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
 github.com/klauspost/compress v1.15.9 
h1:wKRjX6JRtDdrE9qwa4b/Cip7ACOshUI4smpCQanqjSY=
 github.com/klauspost/compress v1.15.9/go.mod 
h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU=
 github.com/kr/pretty v0.1.0/go.mod 
h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
diff --git a/pitr/agent/main.go b/pitr/agent/main.go
index b737a4c..fcecc73 100644
--- a/pitr/agent/main.go
+++ b/pitr/agent/main.go
@@ -31,6 +31,7 @@ import (
        "github.com/apache/shardingsphere-on-cloud/pitr/agent/pkg/logging"
        "github.com/apache/shardingsphere-on-cloud/pitr/agent/pkg/responder"
        "github.com/gofiber/fiber/v2"
+       "github.com/joho/godotenv"
        "go.uber.org/zap"
        "go.uber.org/zap/zapcore"
 )
@@ -45,11 +46,12 @@ var (
 )
 
 var (
-       logLevel string
-       port     string
-       pgData   string
-       tlsCrt   string
-       tlsKey   string
+       logLevel      string
+       port          string
+       pgData        string
+       tlsCrt        string
+       tlsKey        string
+       envSourceFile string
 )
 
 func init() {
@@ -61,11 +63,20 @@ func init() {
        flag.StringVar(&tlsKey, "tls-key", "", "Require:TLS key file path")
 
        flag.StringVar(&pgData, "pgdata", "", "Optional:Get the value from cli 
flags or env")
+
+       flag.StringVar(&envSourceFile, "env-source-file", "", "Optional:env 
source file path")
 }
 
 func main() {
        flag.Parse()
 
+       if envSourceFile != "" {
+               err := godotenv.Load(envSourceFile)
+               if err != nil {
+                       panic(fmt.Errorf("load env source file error:%s", 
err.Error()))
+               }
+       }
+
        shell := os.Getenv("SHELL")
        if shell == "" {
                panic(fmt.Errorf("shell does not exist"))
@@ -170,6 +181,6 @@ func Serve(port string) error {
                return responder.NotFound(ctx, "API not found")
        })
 
-       //      return app.Listen(":18080")
+       //return app.Listen(":18080")
        return app.ListenTLS(fmt.Sprintf(":%s", port), tlsCrt, tlsKey)
 }
diff --git a/pitr/agent/pkg/cmds/cmd.go b/pitr/agent/pkg/cmds/cmd.go
index 4720020..5ed1761 100644
--- a/pitr/agent/pkg/cmds/cmd.go
+++ b/pitr/agent/pkg/cmds/cmd.go
@@ -21,7 +21,9 @@ import (
        "bufio"
        "fmt"
        "io"
+       "os"
        "os/exec"
+       "strings"
 
        "github.com/apache/shardingsphere-on-cloud/pitr/agent/internal/cons"
        "github.com/apache/shardingsphere-on-cloud/pitr/agent/pkg/logging"
@@ -36,6 +38,8 @@ type Output struct {
 
 // AsyncExec Async exec a command
 func AsyncExec(name string, args ...string) (chan *Output, error) {
+       args = loadArgs(args...)
+
        c := "-c"
        args = append([]string{c}, args...)
 
@@ -98,6 +102,8 @@ func AsyncExec(name string, args ...string) (chan *Output, 
error) {
 
 // Exec exec a command
 func Exec(name string, args ...string) (string, error) {
+       args = loadArgs(args...)
+
        c := "-c"
        args = append([]string{c}, args...)
 
@@ -125,3 +131,21 @@ func Exec(name string, args ...string) (string, error) {
        }
        return string(reader), nil
 }
+
+// loadArgs if env is set, replace the command.
+func loadArgs(args ...string) []string {
+       if len(args) > 0 {
+               arg := args[0]
+
+               // check gs_probackup
+               if v, ok := os.LookupEnv("gs_probackup"); ok && 
strings.HasPrefix(arg, "gs_probackup") {
+                       args[0] = strings.Replace(arg, "gs_probackup", v, 1)
+               }
+
+               // check gs_ctrl
+               if v, ok := os.LookupEnv("gs_ctrl"); ok && 
strings.HasPrefix(arg, "gs_ctrl") {
+                       args[0] = strings.Replace(arg, "gs_ctrl", v, 1)
+               }
+       }
+       return args
+}
diff --git a/pitr/agent/pkg/cmds/cmd_test.go b/pitr/agent/pkg/cmds/cmd_test.go
index 012afbb..55cd053 100644
--- a/pitr/agent/pkg/cmds/cmd_test.go
+++ b/pitr/agent/pkg/cmds/cmd_test.go
@@ -18,6 +18,9 @@
 package cmds
 
 import (
+       "os"
+       "strings"
+
        . "github.com/onsi/ginkgo/v2"
        . "github.com/onsi/gomega"
 )
@@ -50,4 +53,18 @@ var _ = Describe("Commands", func() {
                        Expect(output).To(Equal("10\n20\n"))
                })
        })
+
+       Context("test loadArgs", func() {
+               It("test reload gs_probackup", func() {
+                       new := "/bin/new/gs_probackup"
+                       os.Setenv("gs_probackup", new)
+                       defer os.Unsetenv("gs_probackup")
+
+                       args := loadArgs("gs_probackup", "backup", "-B", 
"/tmp", "-b", "FULL", "-D", "/tmp")
+                       Expect(args[0]).To(Equal(new))
+
+                       args = loadArgs("gs_probackup backup -B /tmp -b FULL -D 
/tmp")
+                       Expect(strings.HasPrefix(args[0], new)).To(Equal(true))
+               })
+       })
 })

Reply via email to