fix: readFile and exec should run in the directory the template file resides in (#340)
Fixes #299
This commit is contained in:
parent
37ea442515
commit
81d796c167
4
main.go
4
main.go
|
|
@ -613,7 +613,7 @@ type twoPassRenderer struct {
|
|||
|
||||
func (r *twoPassRenderer) renderEnvironment(content []byte) environment.Environment {
|
||||
firstPassEnv := environment.Environment{Name: r.env, Values: map[string]interface{}(nil)}
|
||||
firstPassRenderer := tmpl.NewFirstPassRenderer(firstPassEnv)
|
||||
firstPassRenderer := tmpl.NewFirstPassRenderer(filepath.Dir(r.filename), firstPassEnv)
|
||||
|
||||
// parse as much as we can, tolerate errors, this is a preparse
|
||||
yamlBuf, err := firstPassRenderer.RenderTemplateContentToBuffer(content)
|
||||
|
|
@ -641,7 +641,7 @@ func (r *twoPassRenderer) renderTemplate(content []byte) (*bytes.Buffer, error)
|
|||
// try a first pass render. This will always succeed, but can produce a limited env
|
||||
firstPassEnv := r.renderEnvironment(content)
|
||||
|
||||
secondPassRenderer := tmpl.NewFileRenderer(r.reader, "", firstPassEnv)
|
||||
secondPassRenderer := tmpl.NewFileRenderer(r.reader, filepath.Dir(r.filename), firstPassEnv)
|
||||
yamlBuf, err := secondPassRenderer.RenderTemplateContentToBuffer(content)
|
||||
if err != nil {
|
||||
if r.logger != nil {
|
||||
|
|
|
|||
|
|
@ -100,9 +100,10 @@ func (state *HelmState) loadEnv(name string, readFile func(string) ([]byte, erro
|
|||
envVals := map[string]interface{}{}
|
||||
envSpec, ok := state.Environments[name]
|
||||
if ok {
|
||||
r := valuesfile.NewRenderer(readFile, state.basePath, environment.EmptyEnvironment)
|
||||
for _, envvalFile := range envSpec.Values {
|
||||
bytes, err := r.RenderToBytes(filepath.Join(state.basePath, envvalFile))
|
||||
envvalFullPath := filepath.Join(state.basePath, envvalFile)
|
||||
r := valuesfile.NewRenderer(readFile, filepath.Dir(envvalFullPath), environment.EmptyEnvironment)
|
||||
bytes, err := r.RenderToBytes(envvalFullPath)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to load environment values file \"%s\": %v", envvalFile, err)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -886,7 +886,7 @@ func (state *HelmState) flagsForLint(helm helmexec.Interface, release *ReleaseSp
|
|||
}
|
||||
|
||||
func (state *HelmState) RenderValuesFileToBytes(path string) ([]byte, error) {
|
||||
r := valuesfile.NewRenderer(state.readFile, state.basePath, state.Env)
|
||||
r := valuesfile.NewRenderer(state.readFile, filepath.Dir(path), state.Env)
|
||||
return r.RenderToBytes(path)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -35,12 +35,12 @@ func NewFileRenderer(readFile func(filename string) ([]byte, error), basePath st
|
|||
}
|
||||
}
|
||||
|
||||
func NewFirstPassRenderer(env environment.Environment) *templateFileRenderer {
|
||||
func NewFirstPassRenderer(basePath string, env environment.Environment) *templateFileRenderer {
|
||||
return &templateFileRenderer{
|
||||
ReadFile: ioutil.ReadFile,
|
||||
Context: &Context{
|
||||
preRender: true,
|
||||
basePath: "",
|
||||
basePath: basePath,
|
||||
readFile: ioutil.ReadFile,
|
||||
},
|
||||
Data: TemplateData{
|
||||
|
|
|
|||
|
|
@ -53,6 +53,7 @@ func (c *Context) Exec(command string, args []interface{}, inputs ...string) (st
|
|||
}
|
||||
|
||||
cmd := exec.Command(command, strArgs...)
|
||||
cmd.Dir = c.basePath
|
||||
|
||||
writeErrs := make(chan error)
|
||||
cmdErrs := make(chan error)
|
||||
|
|
|
|||
Loading…
Reference in New Issue