Merge pull request #3061 from eicnix/feature/tpl-fix

fix(helm): Set template context inside tpl function to outer function.
pull/3239/merge
Matthew Fisher 7 years ago committed by GitHub
commit 78d6b930bd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -166,19 +166,30 @@ func (e *Engine) alterFuncMap(t *template.Template) template.FuncMap {
// Add the 'tpl' function here
funcMap["tpl"] = func(tpl string, vals chartutil.Values) (string, error) {
basePath, err := vals.PathValue("Template.BasePath")
if err != nil {
return "", fmt.Errorf("Cannot retrieve Template.Basepath from values inside tpl function: %s (%s)", tpl, err.Error())
}
r := renderable{
tpl: tpl,
vals: vals,
tpl: tpl,
vals: vals,
basePath: basePath.(string),
}
templates := map[string]renderable{}
templates["aaa_template"] = r
templateName, err := vals.PathValue("Template.Name")
if err != nil {
return "", fmt.Errorf("Cannot retrieve Template.Name from values inside tpl function: %s (%s)", tpl, err.Error())
}
templates[templateName.(string)] = r
result, err := e.render(templates)
if err != nil {
return "", fmt.Errorf("Error during tpl function execution for %q: %s", tpl, err.Error())
}
return result["aaa_template"], nil
return result[templateName.(string)], nil
}
return funcMap

@ -538,7 +538,7 @@ func TestAlterFuncMap(t *testing.T) {
Metadata: &chart.Metadata{Name: "TplFunction"},
Templates: []*chart.Template{
{Name: "templates/base", Data: []byte(`{{ tpl "{{include ` + "`" + `TplFunction/templates/_partial` + "`" + ` . | quote }}" .}}`)},
{Name: "templates/_partial", Data: []byte(`{{.Release.Name}}`)},
{Name: "templates/_partial", Data: []byte(`{{.Template.Name}}`)},
},
Values: &chart.Config{Raw: ``},
Dependencies: []*chart.Chart{},
@ -558,7 +558,7 @@ func TestAlterFuncMap(t *testing.T) {
t.Fatal(err)
}
expectedTplStrWithInclude := "\"TestRelease\""
expectedTplStrWithInclude := "\"TplFunction/templates/base\""
if gotStrTplWithInclude := outTplWithInclude["TplFunction/templates/base"]; gotStrTplWithInclude != expectedTplStrWithInclude {
t.Errorf("Expected %q, got %q (%v)", expectedTplStrWithInclude, gotStrTplWithInclude, outTplWithInclude)
}

Loading…
Cancel
Save