From 6c5264c35dac3443cd376564137a2287e5b97823 Mon Sep 17 00:00:00 2001 From: ozgeonay Date: Sun, 19 May 2024 21:16:40 +0300 Subject: [PATCH] feat: config environment variables replacement implemented. (#97) --- dcp.go | 18 ++++++++++++++++++ dcp_test.go | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/dcp.go b/dcp.go index 359f782..287e7e1 100644 --- a/dcp.go +++ b/dcp.go @@ -7,6 +7,8 @@ import ( "os" "os/signal" "reflect" + "regexp" + "strings" "syscall" "github.com/asaskevich/EventBus" @@ -313,6 +315,22 @@ func newDcpConfig(path string) (config.Dcp, error) { if err != nil { return config.Dcp{}, err } + + envPattern := regexp.MustCompile(`\${([^}]+)}`) + matches := envPattern.FindAllStringSubmatch(string(file), -1) + for _, match := range matches { + envVar := match[1] + if value, exists := os.LookupEnv(envVar); exists { + updatedFile := strings.ReplaceAll(string(file), "${"+envVar+"}", value) + file = []byte(updatedFile) + } + } + + err = yaml.Unmarshal(file, &c) + if err != nil { + return config.Dcp{}, err + } + return c, nil } diff --git a/dcp_test.go b/dcp_test.go index 4da2690..1f4a1c6 100644 --- a/dcp_test.go +++ b/dcp_test.go @@ -251,3 +251,43 @@ func TestDcp(t *testing.T) { test(t, version) }) } + +func TestNewDcpConfigWithEnvVariables(t *testing.T) { + os.Setenv("DCP_USERNAME", "envUser") + os.Setenv("DCP_PASSWORD", "envPass") + os.Setenv("DCP_BUCKET_NAME", "envBucket") + + configContent := ` +hosts: ["localhost:8091"] +username: ${DCP_USERNAME} +password: ${DCP_PASSWORD} +bucketName: ${DCP_BUCKET_NAME} +` + tmpFile, err := os.CreateTemp("", "dcpConfig-*.yaml") + if err != nil { + t.Fatal(err) + } + defer os.Remove(tmpFile.Name()) + + if _, err := tmpFile.Write([]byte(configContent)); err != nil { + t.Fatal(err) + } + if err := tmpFile.Close(); err != nil { + t.Fatal(err) + } + + dcpConfig, err := newDcpConfig(tmpFile.Name()) + if err != nil { + t.Fatal(err) + } + + if dcpConfig.Username != "envUser" { + t.Errorf("expected username to be 'envUser', got '%s'", dcpConfig.Username) + } + if dcpConfig.Password != "envPass" { + t.Errorf("expected password to be 'envPass', got '%s'", dcpConfig.Password) + } + if dcpConfig.BucketName != "envBucket" { + t.Errorf("expected bucketName to be 'envBucket', got '%s'", dcpConfig.BucketName) + } +}