Комментарии 15
Лет 10-20 назад разработчики конфигурировали серверы на Bash. Это было неудобно, поскольку они не могли делиться с другими специалистами своими наработками.
Почему не могли? На баш можно писать простые вменяемые конструкции. На баше можно обрабатывать json/cvs файлы или работать с базой, чтобы хранить в удобном виде.
Основная проблема это разнообразие дистрибутивов, пакет менеджеров, зоопарка версий.. Поэтому оркестраторы которые брали на себя поддержку всего этого дела стали популярными.
Но да, огромный минус json/yaml это очень неудобная отладка, и слишком часто начав шаблонизировать, люди их усложняют, в результате разобрать на 100% что там происходит - очень неудобно и долго. Потому что неудобная отладка.
P.S. А еще добавьте в список helm
Я бы сказал, что для Терраформа на такой случай есть CDKTF (https://developer.hashicorp.com/terraform/cdktf). В нем можно создавать нужные конфигурации на любимом языке. Почему-то люди особенно любят TypeScript для этого. Не читал, но осуждаю.
Недавно вышла 0.20.
Полезная статья! Нашел, что искал. Спасибо!
В рельсах к слову есть такая вещь как json builder. Шикарный шаблонизатор для JSON. Все проблемы с запятыми как раз решаются использованием подходящего шаблонизатора. Очень странно юзать шаблонизатор для XML/HTML (ERB) для JSON ,)
Переписал ваши примеры на простеньком DSL на базе формата Tree:

Транслятор этого в 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.
Глоток свежего воздуха прямо. Страшный сон - шаблоны с макросами, подключаемыми из других шаблонов, в которых тоже макросы. И это невозможно отлаживать.
А потом кому-то не хватило возможностей шаблонизатора и внутри шаблона появляются куски кода
Термин "тотальный" означает не это.
Наверное, вы имели в виду детерминированный?
Есть уже специализированные языки программирования для этого например CUE lang посмотрите в его сторону очень развивающийся и интересный инструмент.
«Хватит программировать в YAML и JSON!»: неочевидные проблемы шаблонизирования