feat(templater): Add insertTemplate function

Similar to insertFile, but runs the templating against the file before
inserting.

This is useful for sharing common config between yaml files, e.g. volume
mounts in a deployment.yaml and cronjob.yaml, and it's useful to be able
to use the `configHash` annotation pattern with a templated
configmap.yaml
This commit is contained in:
Jude Venn 2019-04-29 23:13:15 +01:00 committed by Vincent Ambo
parent 8abe03de3c
commit 6353ed9d14
2 changed files with 11 additions and 1 deletions

View file

@ -72,13 +72,15 @@ right.
Some template functions come from Go's standard library and are listed in the
[Go documentation][]. In addition the functions declared by [sprig][] are
available in kontemplate, as well as three custom functions:
available in kontemplate, as well as five custom functions:
* `json`: Encodes any supplied data structure as JSON.
* `gitHEAD`: Retrieves the commit hash at Git `HEAD`.
* `passLookup`: Looks up the supplied key in [pass][].
* `insertFile`: Insert the contents of the given file in the resource
set folder as a string.
* `insertTemplate`: Insert the contents of the given template in the resource
set folder as a string.
## Examples:

View file

@ -205,6 +205,14 @@ func templateFuncs(c *context.Context, rs *context.ResourceSet) template.FuncMap
return string(data), nil
}
m["insertTemplate"] = func(file string) (string, error) {
data, err := templateFile(c, rs, path.Join(rs.Path, file))
if err != nil {
return "", err
}
return data.Rendered, nil
}
m["default"] = func(defaultVal interface{}, varName string) interface{} {
if val, ok := rs.Values[varName]; ok {
return val