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