213
Dec. 29, 2024, 6:19 a.m.
Шпаргалка по шаблонам HELM
Задача: сформировать данные по возможным сценариям использования шаблонизатора HELM.
Переменные
Объявление перменных
{{ .Values.varName }}
Для сложных манифестов рекомендуется использовать $
чтобы HELM брал переменную точно из файла с переменными:
{{ $.Values.varName }}
Создание переменных в коде
{{- $env := "some value" }}
Вывод перменных из определенного ключа с помощью (index
)
В values.yaml
объявляется
ENVIRONMENT: dev
varName:
dev: test
prod: prod
В коде описывается
{{ index $.Values.varName $env }} # test
Пример вывода переменной из более сложного values.yaml
В values.yaml
объявляется
varName:
dev:
var0: test
var1: someValue
prod:
var0: prod
var1: someValue
# Альтернативная запись
varName:
dev:
- {var0: test, var1: someValue ...}
prod:
- {var0: prod, var1: someValue ...}
В коде описывается
{{ ( index $.Values.varName $env).var0 }}
{{ ( index $.Values.varName $env).var1 }}
Создание переменных по-умолчанию
{{- $myVar := default (index $.Values.SOMEVAR $env) $.Values.CUSTOM }}
Формирование переменных (printf
)
{{- $label := default (printf "prefix-%s-postfix-%s-sometext" $.Values.NAME $.Values.SOME) $.Value.CUSTOM }}
# prefix-<$.Values.NAME>-postfix-<$.Values.SOME>-sometext
Переменные и словари
Объявление
{{- $VAR := dict "item" $.Values.VAR1 "name" $.Values.VAR "prefix" $.Values.VAR3 }}
Обработка в коде:
{{- range .item }}
<...>
{{- end }}
Условия (if
)
Базовое правило
Для проверки наличия переменной делается так:
{{- if $.Values.someValue }}
OK
{{- else }}
NOT OK
{{- end }}
Сравнение переменных
{{- if eq $.Values.someValue "test" }}
result 1
{{- else if eq $.Values.someValue "dev" }}
result 2
{{- else }}
empty
{{- end }}
Сравнение для определенного ключа с помощью (index
)
(см. статью по циклам или переменным)
Сложное правило, проверка наличия переменной и если оно есть поиск в белом списке
{{- if (or (not $.Values.VAR ) (contains not $.Values.VAR (printf "%s" $.Values.WHITELIST))) }}
Альтернативный пример
{{- if (or (not $.Values.VAR) (contains (printf "%s" not $.Values.VAR) (join "," $.Values.WHITELIST))) }}
Циклы (for
)
Базовый цикл
Для того чтобы была воможность использовать цикл в цикле можно определять count
и index
:
{{- range $index, $value := $.values.varName }}
{{- end }}
где:
$index
- это номер итерации цикла, начинается с 0. Название может быть отличным от предложенного;$value
- на каждой итерации в эту перменную заносятся данные. В коде используется так{{ $values }}
, вместо{{ . }}
;
Вывод в цикле переменных для определенного ключа
Перменная для массива:
varName:
dev:
- {name: test, value: some ...}
- {name: test, value: some ...}
- ...
В коде описывается
{{- range $index, $value := index $.Values.varName $env }}
{{ $value.name }}
{{ $value.value }}
{{- end }}
Обработка нескольких списков по ключу (index
)
Объявляется переменная
VAR:
default
- {name: test, value: some ...}
- {name: test, value: some ...}
- ...
all
- {name: test, value: some ...}
- {name: test, value: some ...}
- ...
dev:
- {name: test, value: some ...}
- {name: test, value: some ...}
- ...
В коде описывается
{{- range $listIndex , $array := (list (index $.Values.VAR "default") (index $.Values.VAR "all") (index $.Values.VAR $env)) }}
{{- range $index, $value := $array }}
<...>
{{- end }}
{{- end }}
*индекс каждого цикла начинается с 0, чтобы не было дубликтов рекомендуется использовать $listIndex
и $index
совместно