Templaer
Templaer - универсальный CLI шаблонизатор конфигурационных файлов, основанный на Jinja2.
- GitHub - https://github.com/denisxab/templaer
- Pip - 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, его можно гибко кастомизировать. Если вам нравиться использовать другие шаблонизаторы конфигураций, то используйте их.
Установка
-
Установить
templaerpip install templaer
-
Получить подсказку по
CLIpython -m templaer
Можете создать алиас в
.bashrc/.zshrcдля этой командыalias templaer="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_type text/html;
return 200 'ok';
}
}
-
Собрать указанные файлы (можно указывать несколько файлов).
python -m templaer -c context.jsonc -f Файл0.conf.tpl Файл1.tpl
-
Поиск в указанной директории всех файлов, которые оканчиваются на .tpl, и сборка этих файлов (можно указывать несколько директорий).
python -m templaer -c context.jsonc -d Папка
-
Часто бывает нужно чтобы данные хранились в
.envфайле, например это нужно дляDocker. И чтобы не держать две копии данных вcontext.jsoncи.envфайлах. Можно указать флаг-e_- тогда он создаст.envфайл на основеcontext.jsoncи поместит его в туже папку где иcontext.jsonc.python -m templaer -c context.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 -m templaer -c context.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 -m templaer -c context.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_D if DEBUG else PORT_R }}; server_name "localhost"; location / { default_type text/html; return 200 'ok'; } }
-
Соберем файл используя команду:
python -m templaer -c context.jsonc -f ЛюбойФайл.conf.tpl
-
В итоге создастся(или перезапишитесь) новый файл
ЛюбойФайл.conf, с содержанием:server { listen 80; server_name "localhost"; location / { default_type text/html; return 200 'ok'; } }
Готовые шаблоны проектов
Templaer удобно использовать для кастомной шаблонизации проектов. В этой главе собраны инструкции как создать, и запустить проект, из шаблона.
Django REST + PostgreSQL + Nginx + Docker
-
Собрать проект для
Django:templaer -e_ \ -c ./st/django_project/пример_context.jsonc \ -ti ./st/django_project \ -to ПапкаКудаСобрать
-
Собрать и запустить контейнеры, через
docker-compose:docker-compose build && docker-compose up
-
Создать и применить миграции в БД, и собрать статические файлы в Django:
make docker_init_django
-
Собрать приложение для
Django:templaer \ -ti ./st/django_app \ -to ПапкаКудаСобрать
Metadata
Release files for templaer 0.1.6.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| templaer-0.1.6.2.tar.gz | 68.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| templaer-0.1.6.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 139.6 kB
Release files / templaer-0.1.6.2.tar.gz
| Download URL | templaer-0.1.6.2.tar.gz |
|---|---|
| Size | 68.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
56caaf062cf9bf0d739a9b7eddeb06ebd15e21d28bc51bb45b00b1692002d892
|
|
BLAKE2b-256 checksum How to use checksums |
55d21684dc9b4c4c5b70ddf4c28f7fd5cb1629d993c2ac741ff8b20781996d03
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.3.2 CPython/3.11.0rc1 Linux/5.15.0-60-generic
|
Release files / templaer-0.1.6.2-py3-none-any.whl
| Download URL | templaer-0.1.6.2-py3-none-any.whl |
|---|---|
| Size | 71.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
de9beed7e895ac8a906e999e37a2660f71b28ed2226f5747e5579c01e89eda52
|
|
BLAKE2b-256 checksum How to use checksums |
40ce45a85dc5130d9e4a780f35e9ec0b2fb7c043be92eb24b2a1a008f5217feb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.3.2 CPython/3.11.0rc1 Linux/5.15.0-60-generic
|