Helm _helpers.tpl: Calling defined templates in other template definitions

34,429

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 -}}
Share:
34,429
Noah Huppert
Author by

Noah Huppert

noahh.io | noahhuppert.com

Updated on September 12, 2020

Comments

  • Noah Huppert
    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?