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))
+ })
+ })
})