Как подружить helm со своим шаблонизатором?
Helm использует go templates для рендеринга манифестов. Есть функции, которые были разработаны специально для helm. Но в большинстве своем используется библиотека Sprig.
Но что, если нам мало функций и мы хотим воспользоваться каким-нибудь своим кастомным шаблонизатором?
В этой статье я покажу пример, как подключить шаблонизатор gomplate. Но это не помешает вам использовать какой-нибудь другой. Принципы одинаковые.
gomplate содержит огромное количество функций по работе со строками, сетью, криптографией и т.д.
Одна из киллер-фичей – получать данные из разных источников: файлы, https, git, ssh, AWS EC2 metadata, AWS Secret Manager, BoltDB, Hashicorp Consul и Hashicorp Vault.
Подготовка
Для начала надо установить helm и gomplate , если они еще не установлены.
$ brew install helm $ brew install gomplate
Первая сложность: gomplate и helm используют одинаковые кавычки-разделители
Можно было бы начать их экранировать. Но это ни к чему хорошему не приведет. Будет много некрасивого кода и кавычек. Поэтому проще назначить другие кавычки для gomplate.
export GOMPLATE_LEFT_DELIM="[[" export GOMPLATE_RIGHT_DELIM="]]"
Тестируем:
echo 'Hello, [[ .Env.USER ]]' | gomplate Hello, zhilyaev
Создаем helm chart
# [[ 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 имеет флажок
Диаграмма работы:
Запускаем:
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
Послесловие
Внедрение
Больше полезных материалов смотрите в моем блоге на Хабре: https://habr.com/ru/users/ZhilyaevDmitriy/.