Helm _helpers.tpl: Calling defined templates in other template definitions
Solution 1
You should use Nested template definitions.
In your particular case it is:
{{- define "host" -}}
{{ template "name" . }}.example.com
{{- end -}}
Solution 2
You can use (include ... )
syntax. Example of including previously defined template foo
:
{{- define "bar" -}}
{{- printf "%s-%s" (include "foo" .) .Release.Namespace | trunc 63 | trimSuffix "-" -}}
{{- end -}}
Comments
-
Noah Huppert over 3 years
Helm _helpers.tpl?
Helm allows for the use of Go templating in resource files for Kubernetes.
A file named
_helpers.tpl
is usually used to define Go template helpers with this syntax:{{- define "yourFnName" -}} {{- printf "%s-%s" .Values.name .Values.version | trunc 63 -}} {{- end -}}
Which you can then use in your
*.yaml
resource files like so:{{ template "yourFnName" . }}
The Question
How can I use the helpers I define, in other helper definitions?
For example, what if I have a helper for the application name, and want to use that in the definition for a helper which determines the ingress host name?
I have tried calling helpers in other definitions a couple different ways. Given this basic helper function:
{{- define "host" -}} {{- printf "%.example.com" <Somehow get result of "name" helper here> -}} {{- end -}}
I have tried the following:
{{- printf "%.example.com" {{ template "name" . }} -}} {{- printf "%.example.com" {{- template "name" . -}} -}} {{- printf "%.example.com" ( template "name" . ) -}} {{- printf "%.example.com" template "name" . -}} # Separator {{- $name := {{ template "environment" . }} -}} {{- printf "%.example.com" $name -}} # Separator {{- $name := template "environment" . -}} {{- printf "%.example.com" $name -}} # Separator {{- $name := environment -}} {{- printf "%.example.com" $name -}}
Is it possible to even do this? If so, how?