Ответ
Helm использует шаблонизатор Go (text/template) с мощным набором дополнительных функций из библиотеки Sprig.
Пример шаблона Deployment с условиями и функциями:
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-{{ .Chart.Name }}
labels:
app: {{ .Chart.Name | trunc 63 | trimSuffix "-" }}
version: {{ .Values.image.tag | default "latest" }}
date: {{ now | date "2006-01-02" }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ .Chart.Name }}
template:
metadata:
labels:
app: {{ .Chart.Name }}
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
{{- if .Values.resources }}
resources:
{{- toYaml .Values.resources | nindent 10 }}
{{- end }}
env:
{{- range $key, $value := .Values.env }} # Цикл по переменным
- name: {{ $key }}
value: {{ $value | quote }}
{{- end }}
Ключевые особенности:
.Values,.Release,.Chart– основные объекты для доступа к переменным изvalues.yamlи метаинформации.- Функции Sprig (
trunc,now,nindent,toYaml) для манипуляций со строками, датами, структурами. - Директивы управления
{{-и-}}для контроля пробелов,{{ if }},{{ range }}. - Функции
includeиtemplateдля повторного использования блоков шаблонов.
Для отладки всегда использовал команду helm template [RELEASE_NAME] [CHART] --values myvalues.yaml --dry-run, чтобы увидеть итоговые манифесты перед установкой.