Как стать автором
Обновить

Как подружить helm со своим шаблонизатором?

Время на прочтение2 мин
Количество просмотров3.5K

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 имеет флажок --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. В нем мы решаем повседневные проблемы при работе с helm, не вмешиваясь в функционал чартов.

Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
Всего голосов 7: ↑7 и ↓0+7
Комментарии0

Публикации

Истории

Работа

DevOps инженер
28 вакансий

Ближайшие события

19 марта – 28 апреля
Экспедиция «Рэйдикс»
Нижний НовгородЕкатеринбургНовосибирскВладивостокИжевскКазаньТюменьУфаИркутскЧелябинскСамараХабаровскКрасноярскОмск
22 апреля
VK Видео Meetup 2025
МоскваОнлайн
23 апреля
Meetup DevOps 43Tech
Санкт-ПетербургОнлайн
24 апреля
VK Go Meetup 2025
Санкт-ПетербургОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань
14 мая
LinkMeetup
Москва
5 июня
Конференция TechRec AI&HR 2025
МоскваОнлайн
20 – 22 июня
Летняя айти-тусовка Summer Merge
Ульяновская область