163 July 7, 2024, 6:19 a.m.

Шпаргалка по шаблонам 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 }}

Комбинируя между собоой данные методы, можно стоить сложные и в тоже время гибкие чарты.