fix: convert path to absolute path when doing `helm secret dec` (#664)

Fixes #663
This commit is contained in:
Kevin J. Qiu 2019-06-10 08:43:20 -04:00 committed by KUOKA Yusuke
parent 56c27c2bd9
commit 34fbfb4fd0
2 changed files with 18 additions and 7 deletions

View File

@ -5,6 +5,7 @@ import (
"io" "io"
"io/ioutil" "io/ioutil"
"os" "os"
"path/filepath"
"strings" "strings"
"sync" "sync"
@ -130,10 +131,14 @@ func (helm *execer) DecryptSecret(context HelmContext, name string, flags ...str
helm.decryptionMutex.Lock() helm.decryptionMutex.Lock()
defer helm.decryptionMutex.Unlock() 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) preArgs := context.GetTillerlessArgs(helm.helmBinary)
env := context.getTillerlessEnv() 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) helm.write(out)
if err != nil { if err != nil {
return "", err return "", err
@ -150,7 +155,7 @@ func (helm *execer) DecryptSecret(context HelmContext, name string, flags ...str
if len(decSuffix) == 0 { if len(decSuffix) == 0 {
decSuffix = ".yaml.dec" 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 // 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 // Instead of moving, copy it to the destination temp file as a work-around

View File

@ -2,8 +2,10 @@ package helmexec
import ( import (
"bytes" "bytes"
"fmt"
"os" "os"
"path" "path"
"path/filepath"
"reflect" "reflect"
"testing" "testing"
@ -213,10 +215,14 @@ func Test_DecryptSecret(t *testing.T) {
logger := NewLogger(&buffer, "debug") logger := NewLogger(&buffer, "debug")
helm := MockExecer(logger, "dev") helm := MockExecer(logger, "dev")
helm.DecryptSecret(HelmContext{}, "secretName") helm.DecryptSecret(HelmContext{}, "secretName")
expected := `Decrypting secret secretName cwd, err := filepath.Abs(".")
exec: helm secrets dec secretName --kube-context dev if err != nil {
exec: helm secrets dec secretName --kube-context dev: 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 { if buffer.String() != expected {
t.Errorf("helmexec.DecryptSecret()\nactual = %v\nexpect = %v", buffer.String(), expected) t.Errorf("helmexec.DecryptSecret()\nactual = %v\nexpect = %v", buffer.String(), expected)
} }