diff --git a/helmexec/exec.go b/helmexec/exec.go index d265116a..663fb92c 100644 --- a/helmexec/exec.go +++ b/helmexec/exec.go @@ -120,7 +120,8 @@ func (helm *execer) DecryptSecret(name string) (string, error) { // 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 // See https://github.com/roboll/helmfile/issues/251#issuecomment-417166296f - decFile, err := os.Open(name + ".dec") + decFilename := name + ".dec" + decFile, err := os.Open(decFilename) if err != nil { return "", err } @@ -131,6 +132,14 @@ func (helm *execer) DecryptSecret(name string) (string, error) { return "", err } + if err := decFile.Close(); err != nil { + return "", err + } + + if err := os.Remove(decFilename); err != nil { + return "", err + } + return tmpFile.Name(), err } diff --git a/tmpl/context.go b/tmpl/context.go index 0c7a5cb5..180ef649 100644 --- a/tmpl/context.go +++ b/tmpl/context.go @@ -1,5 +1,6 @@ package tmpl type Context struct { + basePath string readFile func(string) ([]byte, error) } diff --git a/tmpl/file.go b/tmpl/file.go index c2d6572c..6370893f 100644 --- a/tmpl/file.go +++ b/tmpl/file.go @@ -2,11 +2,9 @@ package tmpl import ( "bytes" - "path/filepath" ) type templateFileRenderer struct { - basePath string ReadFile func(string) ([]byte, error) Context *Context } @@ -17,19 +15,16 @@ type FileRenderer interface { func NewFileRenderer(readFile func(filename string) ([]byte, error), basePath string) *templateFileRenderer { return &templateFileRenderer{ - basePath: basePath, ReadFile: readFile, Context: &Context{ + basePath: basePath, readFile: readFile, }, } } func (r *templateFileRenderer) RenderTemplateFileToBuffer(file string) (*bytes.Buffer, error) { - // path to the file relative to the helmfile.yaml - path := filepath.Join(r.basePath, file) - - content, err := r.ReadFile(path) + content, err := r.ReadFile(file) if err != nil { return nil, err } diff --git a/tmpl/funcs.go b/tmpl/funcs.go index ed4058a0..9458d741 100644 --- a/tmpl/funcs.go +++ b/tmpl/funcs.go @@ -4,6 +4,7 @@ import ( "fmt" "gopkg.in/yaml.v2" "os" + "path/filepath" "strings" "text/template" ) @@ -21,7 +22,9 @@ func (c *Context) createFuncMap() template.FuncMap { } func (c *Context) ReadFile(filename string) (string, error) { - bytes, err := c.readFile(filename) + path := filepath.Join(c.basePath, filename) + + bytes, err := c.readFile(path) if err != nil { return "", err }