From 34fbfb4fd02626517ea8a1bf899e767f0199bef7 Mon Sep 17 00:00:00 2001 From: "Kevin J. Qiu" Date: Mon, 10 Jun 2019 08:43:20 -0400 Subject: [PATCH] fix: convert path to absolute path when doing `helm secret dec` (#664) Fixes #663 --- pkg/helmexec/exec.go | 11 ++++++++--- pkg/helmexec/exec_test.go | 14 ++++++++++---- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/pkg/helmexec/exec.go b/pkg/helmexec/exec.go index da8ce1b3..8c482d1e 100644 --- a/pkg/helmexec/exec.go +++ b/pkg/helmexec/exec.go @@ -5,6 +5,7 @@ import ( "io" "io/ioutil" "os" + "path/filepath" "strings" "sync" @@ -130,10 +131,14 @@ func (helm *execer) DecryptSecret(context HelmContext, name string, flags ...str helm.decryptionMutex.Lock() defer helm.decryptionMutex.Unlock() - helm.logger.Infof("Decrypting secret %v", name) + absPath, err := filepath.Abs(name) + if err != nil { + return "", err + } + helm.logger.Infof("Decrypting secret %v", absPath) preArgs := context.GetTillerlessArgs(helm.helmBinary) env := context.getTillerlessEnv() - out, err := helm.exec(append(append(preArgs, "secrets", "dec", name), flags...), env) + out, err := helm.exec(append(append(preArgs, "secrets", "dec", absPath), flags...), env) helm.write(out) if err != nil { return "", err @@ -150,7 +155,7 @@ func (helm *execer) DecryptSecret(context HelmContext, name string, flags ...str if len(decSuffix) == 0 { decSuffix = ".yaml.dec" } - decFilename := strings.Replace(name, ".yaml", decSuffix, 1) + decFilename := strings.Replace(absPath, ".yaml", decSuffix, 1) // os.Rename seems to results in "cross-device link` errors in some cases // Instead of moving, copy it to the destination temp file as a work-around diff --git a/pkg/helmexec/exec_test.go b/pkg/helmexec/exec_test.go index 9db0aeb7..85e2f0c8 100644 --- a/pkg/helmexec/exec_test.go +++ b/pkg/helmexec/exec_test.go @@ -2,8 +2,10 @@ package helmexec import ( "bytes" + "fmt" "os" "path" + "path/filepath" "reflect" "testing" @@ -213,10 +215,14 @@ func Test_DecryptSecret(t *testing.T) { logger := NewLogger(&buffer, "debug") helm := MockExecer(logger, "dev") helm.DecryptSecret(HelmContext{}, "secretName") - expected := `Decrypting secret secretName -exec: helm secrets dec secretName --kube-context dev -exec: helm secrets dec secretName --kube-context dev: -` + cwd, err := filepath.Abs(".") + if err != nil { + t.Errorf("Error: %v", err) + } + expected := fmt.Sprintf(`Decrypting secret %s/secretName +exec: helm secrets dec %s/secretName --kube-context dev +exec: helm secrets dec %s/secretName --kube-context dev: +`, cwd, cwd, cwd) if buffer.String() != expected { t.Errorf("helmexec.DecryptSecret()\nactual = %v\nexpect = %v", buffer.String(), expected) }