diff --git a/tmpl/context_funcs.go b/tmpl/context_funcs.go index 69c853b0..28a6f691 100644 --- a/tmpl/context_funcs.go +++ b/tmpl/context_funcs.go @@ -24,6 +24,7 @@ func (c *Context) createFuncMap() template.FuncMap { "requiredEnv": RequiredEnv, "get": get, "getOrNil": getOrNil, + "tpl": c.Tpl, } if c.preRender { // disable potential side-effect template calls @@ -128,6 +129,14 @@ func (c *Context) ReadFile(filename string) (string, error) { return string(bytes), nil } +func (c *Context) Tpl(text string, data interface{}) (string, error) { + buf, err := c.RenderTemplateToBuffer(text, data) + if err != nil { + return "", err + } + return buf.String(), nil +} + func ToYaml(v interface{}) (string, error) { data, err := yaml.Marshal(v) if err != nil { diff --git a/tmpl/context_funcs_test.go b/tmpl/context_funcs_test.go index f1ac09b4..373d6eb0 100644 --- a/tmpl/context_funcs_test.go +++ b/tmpl/context_funcs_test.go @@ -118,3 +118,18 @@ func TestSetValueAtPath_TwoComponents(t *testing.T) { t.Errorf("unexpected result: expected=%v, actual=%v", expected, actual) } } + +func TestTpl(t *testing.T) { + text := `foo: {{ .foo }} +` + expected := `foo: FOO +` + ctx := &Context{basePath: "."} + actual, err := ctx.Tpl(text, map[string]interface{}{"foo": "FOO"}) + if err != nil { + t.Errorf("unexpected error: %v", err) + } + if !reflect.DeepEqual(actual, expected) { + t.Errorf("unexpected result: expected=%v, actual=%v", expected, actual) + } +}