diff --git a/pkg/engine/engine.go b/pkg/engine/engine.go index 595ec2c19..46e0a59cf 100644 --- a/pkg/engine/engine.go +++ b/pkg/engine/engine.go @@ -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 diff --git a/pkg/engine/engine_test.go b/pkg/engine/engine_test.go index 7da4a9103..8ffb3d87c 100644 --- a/pkg/engine/engine_test.go +++ b/pkg/engine/engine_test.go @@ -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) }