_helpers.tpl est la bibliothèque de fonctions du Chart. Il centralise la logique complexe pour garder les templates YAML lisibles. Ce fichier commence par _ : Helm ne le rend jamais directement en manifest Kubernetes.
Principe — Named Templates
Au lieu de dupliquer 10 lignes de labels dans chaque fichier, on définit un template nommé une seule fois :
# _helpers.tpl
{{- define "monapp.labels" -}}
app.kubernetes.io/name: {{ .Chart.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end -}}
# templates/deployment.yaml
metadata:
labels:
{{- include "monapp.labels" . | nindent 4 }}| Syntaxe | Rôle |
|---|---|
{{- define "nom" -}} | Déclarer un Named Template |
{{ include "nom" . }} | Appeler le template (avec passage de contexte) |
{{ template "nom" . }} | Appel simple (sans pipeline possible après) |
Préférer
includeàtemplatecar il supporte le pipe :{{ include "x" . | nindent 4 }}
Fonctions courantes dans _helpers.tpl
| Fonction | Rôle | Exemple |
|---|---|---|
default | Valeur de repli | {{ .Values.port | default 80 }} |
required | Stoppe si manquant | {{ .Values.dbUrl | required "URL requise" }} |
quote | Force le type String | {{ .Values.version | quote }} |
nindent | Indentation correcte | {{ include "..." . | nindent 8 }} |
b64enc | Base64 pour Secrets | {{ .Values.pwd | b64enc }} |
Pièges à éviter
Scope dans range
Dans une boucle range, . devient l’élément courant — on perd l’accès à .Values et .Release.
Utiliser $ pour revenir à la racine :
{{- range .Values.configs }}
{{- include "monapp.renderEnv" (dict "envData" . "root" $) | nindent 12 }}
# $ = contexte global, . = élément de la boucle
{{- end }}Multi-arguments avec dict
Pour passer plusieurs valeurs à un helper, les emballer dans un dictionnaire :
{{- include "monapp.renderEnv" (dict "envData" . "root" $) }}Exemple complet — Générateur d’environnement
_helpers.tpl :
{{- define "monapp.renderEnv" -}}
- name: {{ .envData.name | upper | quote }}
value: {{ .envData.value | default .root.Values.globalDefaultValue | quote }}
{{- end -}}values.yaml :
globalDefaultValue: "VALEUR_PAR_DEFAUT"
configs:
- name: "api_url"
value: "https://api.com"
- name: "debug_mode"
# pas de value → utilisera globalDefaultValuetemplates/deployment.yaml :
env:
{{- range .Values.configs }}
{{- include "monapp.renderEnv" (dict "envData" . "root" $) | nindent 12 }}
{{- end }}YAML généré :
env:
- name: "API_URL"
value: "https://api.com"
- name: "DEBUG_MODE"
value: "VALEUR_PAR_DEFAUT"Pourquoi c’est efficace :
upper: noms de variables uniformément en majusculesquote: toutes les valeurs protégées contre les erreurs YAMLdefault: valeur globale propagée automatiquement si absente
En relation avec
- Templating — Vue d’ensemble — hub templating
- Fonctions Helm — fonctions utilisées dans les helpers
- Conditions et boucles —
rangeet scope$ - Structure d’un chart — emplacement de
_helpers.tpldans l’arborescence