Helm include vs template: в чём разница и как использовать
В Helm-шаблонах часто можно встретить функции include и template. Обе они позволяют встраивать фрагменты шаблонов в другие файлы, но работают немного по-разному.
Разберём, в чём их отличие и как правильно их применять.
Основная разница
| Функция | Возвращает | Особенности |
|---|---|---|
template | Ничего (пишет сразу в вывод) | Подходит для прямой вставки подшаблонов |
include | Строку | Даёт больше гибкости — можно обрабатывать вывод |
Пример 1: template
Функция template просто вставляет содержимое указанного шаблона в текущий вывод.
# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "myapp.fullname" . }}
spec:
template:
spec:
containers:
- name: myapp
image: nginx
{{- template "myapp.env" . }}
Подшаблон myapp.env может выглядеть так:
# templates/_env.tpl
{{- define "myapp.env" -}}
env:
- name: ENV
value: "production"
{{- end }}
Результат — содержимое блока env вставится напрямую.
Пример 2: include
Функция include возвращает строку, которую можно обработать с помощью indent, nindent и других функций.
# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "myapp.fullname" . }}
spec:
template:
spec:
containers:
- name: myapp
image: nginx
{{ include "myapp.env" . | nindent 10 }}
Это удобно, если нужно контролировать отступы или собирать строки:
annotations:
checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
Когда использовать
| Сценарий | Что выбрать |
|---|---|
| Вставка шаблона напрямую | template |
Использование результата как строки (с indent, printf, sha256sum и т.д.) | include |
| Использование шаблонов в аннотациях, лейблах, значениях | include |
| Генерация целых ресурсов (YAML документов) | template |
Заключение
template— вставляет шаблон сразу в вывод.include— возвращает результат как строку, позволяя его модифицировать.
На практике в большинстве случаев DevOps-инженеры предпочитают include,
так как она более гибкая и совместима с другими функциями Helm.
💡 Совет: всегда добавляйте
| nindent N, чтобы сохранить правильные отступы при использованииinclude.