Package: templaer
TemplaerTemplaer- универсальный CLI шаблонизатор конфигурационных файлов, основанный наJinja2.GitHub -https://github.com/denisxab/templaerPip -https://pypi.org/project/templaer/Habr -https://habr.com/ru/post/717996/АналогиСуществует множество инструментов, основанных наJinja2, которые можно использовать для шаблонизации конфигурационных файлов черезCLI. Вот несколько примеров:j2cli: это инструмент командной строки, который позволяет использовать Jinja2 для создания конфигурационных файлов. Он может принимать данные из файлов или стандартного ввода и применять их к шаблонам, включая конфигурационные файлы.cookiecutter: это инструмент командной строки, который использует Jinja2 для генерации проектных шаблонов. Он также может использоваться для создания конфигурационных файлов. cookiecutter может быть установлен через pip.ansible: это инструмент автоматизации, который использует Jinja2 для шаблонизации конфигурационных файлов и других файлов, используемых в автоматизации. ansible может быть установлен через pip.SaltStack: это инструмент автоматизации, который использует Jinja2 для шаблонизации конфигурационных файлов и других файлов, используемых в автоматизации. SaltStack также может быть установлен через pip.mustpl:https://habr.com/ru/post/684898/Я создалTemplaerпотому что им удобнее пользоваться, и так как он наPython, его можно гибко кастомизировать. Если вам нравиться использовать другие шаблонизаторы конфигураций, то используйте их.УстановкаУстановитьtemplaerpipinstalltemplaerПолучить подсказку поCLIpython-mtemplaerМожете создать алиас в.bashrc/.zshrcдля этой командыaliastemplaer="python -m templaer"Примеры CLIШаблонные файлыВ файлеcontext.jsoncхранятся данные для шаблонов, в нем можно использовать комментарии//.В простом варианте это может быть словарь. Ключ - это имя переменной, значение ключа - это значение переменной.{
    // Режим разработчика
    "DEBUG": false,
    // Порт для дебага
    "PORT_D": 8080,
    // Порт для релиза
    "PORT_R": 80
}Пример шаблонного файла. Предлагаю для них указывать расширение.tpl. В данном случае этот файл называетсяnginx.conf.tpl. Новый собранный файл не будет иметь расширение.tpl, и будет называтьсяnginx.conf.server{listen{{PORT_R}};server_name"localhost";location/{default_typetext/html;return200'ok';}}Собрать указанные файлы (можно указывать несколько файлов).python-mtemplaer-ccontext.jsonc-fФайл0.conf.tplФайл1.tplПоиск в указанной директории всех файлов, которые оканчиваются на .tpl, и сборка этих файлов (можно указывать несколько директорий).python-mtemplaer-ccontext.jsonc-dПапкаЧасто бывает нужно чтобы данные хранились в.envфайле, например это нужно дляDocker. И чтобы не держать две копии данных вcontext.jsoncи.envфайлах. Можно указать флаг-e_- тогда он создаст.envфайл на основеcontext.jsoncи поместит его в туже папку где иcontext.jsonc.python-mtemplaer-ccontext.jsonc-fФайл.conf.tpl-e_Шаблонные проектыЧасто бывает нужно создать проект по какому-то шаблону. В таких шаблонах обычно есть папки, есть файлы с шаблонным текстом, который может быть изменен, в зависимости от контекста, и какие-то бинарные файлы.Для того чтобы использовать шаблонный проект - его нужно создать.Пример шаблонного проекта, создаем папкуШаблонПроектасо следующем содержанием:-ШаблонПроекта/-manage.py.tpl-Dockerfile.tpl-requirements.txt-api/-urls.py-views.py-conf/-settings.py.tpl-asgi.py-urls.pyДля того чтобы собрать проект по шаблону, нужно использовать команду:python-mtemplaer-ccontext.jsonc-tiШаблонПроекта-toПапкаКудаСобратьВ итоге создастся новый проект, в папкеПапкаКудаСобрать. В него копируются все файлы и папки изШаблонПроекта, и в нем же будут собраны шаблонные файлы, на основеcontext.jsonc.-ПапкаКудаСобрать/-manage.py.tpl-manage.py-Dockerfile.tpl-Dockerfile-requirements.txt-api/-urls.py-views.py-conf/-settings.py.tpl-settings.py-asgi.py-urls.pyЕсли вы попробуете заново собрать проект в туже папку, то тогда программа в интерактивном режиме будут запрашивать подтверждение на перезапись файлов, которые отличаются от шаблона. Если вы хотите заранее ответить на все вопросыYes, то укажите флаг-y_python-mtemplaer-ccontext.jsonc-tiШаблонПроекта-toПапкаКудаСобрать-y_.Список всех готовых шаблонов.Основы шаблонов на Jinja2Тернарный условный операторВ этом примере показано как в зависимости от переменнойDEBUG, будет поставлено значение из переменнойPORT_DилиPORT_R.Содержание файлаcontext.jsonc:{"DEBUG":false,"PORT_D":8080,"PORT_R":80}Содержание файлаЛюбойФайл.conf.tpl:server{listen{{PORT_DifDEBUGelsePORT_R}};server_name"localhost";location/{default_typetext/html;return200'ok';}}Соберем файл используя команду:python-mtemplaer-ccontext.jsonc-fЛюбойФайл.conf.tplВ итоге создастся(или перезапишитесь) новый файлЛюбойФайл.conf, с содержанием:server{listen80;server_name"localhost";location/{default_typetext/html;return200'ok';}}Готовые шаблоны проектовTemplaerудобно использовать для кастомной шаблонизации проектов. В этой главе собраны инструкции как создать, и запустить проект, из шаблона.Django REST + PostgreSQL + Nginx + DockerСобрать проект дляDjango:templaer-e_\-c./st/django_project/пример_context.jsonc\-ti./st/django_project\-toПапкаКудаСобратьСобрать и запустить контейнеры, черезdocker-compose:docker-composebuild&&docker-composeupСоздать и применить миграции в БД, и собрать статические файлы в Django:makedocker_init_djangoСобрать приложение дляDjango:templaer\-ti./st/django_app\-toПапкаКудаСобрать