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

«Хватит программировать в YAML и JSON!»: неочевидные проблемы шаблонизирования

Время на прочтение10 мин
Количество просмотров16K
Всего голосов 35: ↑33 и ↓2+39
Комментарии15

Комментарии 15

Лет 10-20 назад разработчики конфигурировали серверы на Bash. Это было неудобно, поскольку они не могли делиться с другими специалистами своими наработками.

Почему не могли? На баш можно писать простые вменяемые конструкции. На баше можно обрабатывать json/cvs файлы или работать с базой, чтобы хранить в удобном виде.
Основная проблема это разнообразие дистрибутивов, пакет менеджеров, зоопарка версий.. Поэтому оркестраторы которые брали на себя поддержку всего этого дела стали популярными.

Но да, огромный минус json/yaml это очень неудобная отладка, и слишком часто начав шаблонизировать, люди их усложняют, в результате разобрать на 100% что там происходит - очень неудобно и долго. Потому что неудобная отладка.

P.S. А еще добавьте в список helm

helm обязательно надо добавить. шаблонизировать один yaml другим yaml`ом со всеми его приколами с отступами и переносами строк - это прям "удовольствие"

Я бы сказал, что для Терраформа на такой случай есть CDKTF (https://developer.hashicorp.com/terraform/cdktf). В нем можно создавать нужные конфигурации на любимом языке. Почему-то люди особенно любят TypeScript для этого. Не читал, но осуждаю.

Недавно вышла 0.20.

Полезная статья! Нашел, что искал. Спасибо!

В рельсах к слову есть такая вещь как json builder. Шикарный шаблонизатор для JSON. Все проблемы с запятыми как раз решаются использованием подходящего шаблонизатора. Очень странно юзать шаблонизатор для XML/HTML (ERB) для JSON ,)

Ну и как тут понять где переменная, а где константа?

А какая разница?

Пошёл искать, что за зверь такой - Python-Terrascript, а он не развивается уже несколько лет. Так себе инструмент для сравнения.
Да и в целом проблема не такая большая, как описывается в статье. Да, в некоторых случаях приходится писать некрасивый код и костылять для Terraform, но в целом описание инфраструктуры достаточно наглядное и понятное.

- debug:
msg<b>: </b>'{{ message }}'
vars:
foo<b>: </b>'FOO'
foobar<b>: </b>'{{ foo + "bar" }}'
message<b>: </b>'This is {{ foobar }}'

Вот это вообще какой-то странный пример, непонятно для чего нужный. Я такое в своей практике ни разу не встречал. При работе в Ansible шаблонизировать yaml и json нужды нет вообще. Это нативные для ансибла форматы. При необходимости, вывод в нужный формат делается одним фильтром вида to_nice_json или to_nice_yaml.

Глоток свежего воздуха прямо. Страшный сон - шаблоны с макросами, подключаемыми из других шаблонов, в которых тоже макросы. И это невозможно отлаживать.
А потом кому-то не хватило возможностей шаблонизатора и внутри шаблона появляются куски кода

С успехом применял Jsonnet для сложных конфигураций. Очень простой язык в функциональном стиле, тотальный (гарантированно возвращающий одинаковый результат при тех же входных данных). Является надмножеством json. В частности, хорошо поддерживается k8s.

Термин "тотальный" означает не это.

Есть уже специализированные языки программирования для этого например CUE lang посмотрите в его сторону очень развивающийся и интересный инструмент.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий