- PVSM.RU - https://www.pvsm.ru -
Helm использует go templates [1] для рендеринга манифестов. Есть функции, которые были разработаны специально для helm. Но в большинстве своем используется библиотека Sprig [2].

Но что, если нам мало функций и мы хотим воспользоваться каким-нибудь своим кастомным шаблонизатором?
В этой статье я покажу пример, как подключить шаблонизатор gomplate. Но это не помешает вам использовать какой-нибудь другой. Принципы одинаковые.
gomplate содержит огромное количество функций по работе со строками, сетью, криптографией и т.д.
Одна из киллер-фичей – получать данные из разных источников: файлы, https, git, ssh, AWS EC2 metadata, AWS Secret Manager, BoltDB [3], Hashicorp Consul [4] и Hashicorp Vault [5].
Для начала надо установить helm и gomplate , если они еще не установлены.
$ brew install helm
$ brew install gomplate
Первая сложность: gomplate [6] и helm используют одинаковые кавычки-разделители {{ и }} для шаблонов.
Можно было бы начать их экранировать. Но это ни к чему хорошему не приведет. Будет много некрасивого кода и кавычек. Поэтому проще назначить другие кавычки для gomplate.
export GOMPLATE_LEFT_DELIM="[["
export GOMPLATE_RIGHT_DELIM="]]"
Тестируем:
echo 'Hello, [[ .Env.USER ]]' | gomplate
Hello, zhilyaev
# [[ defineDatasource "foo" "https://httpbin.org/get" ]]
# [[ if not (datasourceReachable "foo")]] unreachable [[end]]
# [[ $d := ds "foo" ]]
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "this.fullname" . }}
labels: {{ include "this.labels" . | nindent 4 }}
data:
random: "[[ random.AlphaNum 32 ]]"
host: "[[ $d.headers.Host ]]"
Переходим к основной части. Helm имеет флажок --post-renderer его мы и будем жадно абузить.

Запускаем:
helm template this chart --post-renderer gomplate
# Source: this/templates/configmap.yaml
#
#
#
apiVersion: v1
kind: ConfigMap
metadata:
name: this
labels:
helm.sh/chart: this-0.1.0
app.kubernetes.io/name: this
app.kubernetes.io/instance: this
app.kubernetes.io/version: "1.16.0"
app.kubernetes.io/managed-by: Helm
data:
random: "2tJyK9xSsg1gvEmunEokQf4lyGkvojiQ"
host: "httpbin.org"
Деплоим:
helm upgrade --install this chart --post-renderer gomplate
Profit
Внедрение --post-renderer вносит дополнительную сложность. Cледуя принципам KISS, попробуйте helmwave [7]. В нем мы решаем повседневные проблемы при работе с helm, не вмешиваясь в функционал чартов.
Автор: Дмитрий Жиляев
Источник [8]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/golang/368626
Ссылки в тексте:
[1] go templates: https://pkg.go.dev/text/template
[2] Sprig: http://masterminds.github.io/sprig/
[3] BoltDB: https://pkg.go.dev/go.etcd.io/bbolt
[4] Hashicorp Consul: https://www.consul.io/
[5] Hashicorp Vault: https://www.vaultproject.io/
[6] gomplate: https://github.com/hairyhenderson/gomplate
[7] helmwave: https://github.com/helmwave/helmwave
[8] Источник: https://habr.com/ru/post/582578/?utm_source=habrahabr&utm_medium=rss&utm_campaign=582578
Нажмите здесь для печати.