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 {
|
func (r *twoPassRenderer) renderEnvironment(content []byte) environment.Environment {
|
||||||
firstPassEnv := environment.Environment{Name: r.env, Values: map[string]interface{}(nil)}
|
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
|
// parse as much as we can, tolerate errors, this is a preparse
|
||||||
yamlBuf, err := firstPassRenderer.RenderTemplateContentToBuffer(content)
|
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
|
// try a first pass render. This will always succeed, but can produce a limited env
|
||||||
firstPassEnv := r.renderEnvironment(content)
|
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)
|
yamlBuf, err := secondPassRenderer.RenderTemplateContentToBuffer(content)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if r.logger != nil {
|
if r.logger != nil {
|
||||||
|
|
|
||||||
|
|
@ -100,9 +100,10 @@ func (state *HelmState) loadEnv(name string, readFile func(string) ([]byte, erro
|
||||||
envVals := map[string]interface{}{}
|
envVals := map[string]interface{}{}
|
||||||
envSpec, ok := state.Environments[name]
|
envSpec, ok := state.Environments[name]
|
||||||
if ok {
|
if ok {
|
||||||
r := valuesfile.NewRenderer(readFile, state.basePath, environment.EmptyEnvironment)
|
|
||||||
for _, envvalFile := range envSpec.Values {
|
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 {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to load environment values file \"%s\": %v", envvalFile, err)
|
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) {
|
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)
|
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{
|
return &templateFileRenderer{
|
||||||
ReadFile: ioutil.ReadFile,
|
ReadFile: ioutil.ReadFile,
|
||||||
Context: &Context{
|
Context: &Context{
|
||||||
preRender: true,
|
preRender: true,
|
||||||
basePath: "",
|
basePath: basePath,
|
||||||
readFile: ioutil.ReadFile,
|
readFile: ioutil.ReadFile,
|
||||||
},
|
},
|
||||||
Data: TemplateData{
|
Data: TemplateData{
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,7 @@ func (c *Context) Exec(command string, args []interface{}, inputs ...string) (st
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd := exec.Command(command, strArgs...)
|
cmd := exec.Command(command, strArgs...)
|
||||||
|
cmd.Dir = c.basePath
|
||||||
|
|
||||||
writeErrs := make(chan error)
|
writeErrs := make(chan error)
|
||||||
cmdErrs := make(chan error)
|
cmdErrs := make(chan error)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue