fix: convert path to absolute path when doing `helm secret dec` (#664)
Fixes #663
This commit is contained in:
parent
56c27c2bd9
commit
34fbfb4fd0
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue