Шпаргалка по шаблонам HELM
Задача: сформировать данные по возможным сценариям использования шаблонизатора HELM.
Начнем с того как в шаблоне объявляетя переменная. По-умолчанию это делается так:
{{ .Values.varName }}
Для сложных манифестов рекомендую использовать $
чтобы HELM брал переменную точно из файла с переменными:
{{ $.Values.varName }}
Для того чтобы была воможность использовать цикл в цикле можно определять count
и index
:
{{- range $index, $value := $.values.varName }}
{{- end }}
где:
$index
- это номер итерации цикла, начинается с 0. Название может быть отличным от предложенного;$value
- на каждой итерации в эту перменную заносятся данные. В коде используется так{{ $values }}
, вместо{{ . }}
;
Представим что у есть универсальный файл с переменными под разные стенды, нам нужно чтобы при измении перменной ENVIRONMENT
применялись соответсвующие перменные:
В начале каждого манифеста задаем
{{- $env := $.Values.ENVIRONMENT }}
ENVIRONMENT: dev
varName:
dev: test
prod: prod
В коде применяется так, то есть $env
применяется та переменная в перменной varName
ключ совпадаем снеобходимым значением:
{{ index $.Values.varName $env }} # test
varName:
dev:
var0: test
var1: someValue
prod:
var0: prod
var1: someValue
{{ ( index $.Values.varName $env).var0 }}
{{ ( index $.Values.varName $env).var1 }}
varName:
dev:
- {name: test, value: some ...}
- {name: test, value: some ...}
- ...
{{- range $index, $value := index $.Values.varName $env }}
{{ $value.name }}
{{ $value.value }}
{{- end }}
Существует несколько вариантов использования правил if
.
к сожалению, HELM не поддерживает сложные правила, поэтому одно правило - одно условие
Для проверки наличия переменной делается так:
{{- 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 }}
Комбинируя между собоой данные методы, можно стоить сложные и в тоже время гибкие чарты.