Skip to main content

Templaer

Templaer - универсальный CLI шаблонизатор конфигурационных файлов, основанный на Jinja2.

Аналоги

Существует множество инструментов, основанных на 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, его можно гибко кастомизировать. Если вам нравиться использовать другие шаблонизаторы конфигураций, то используйте их.

Установка

  1. Установить templaer

    pip install templaer
    
  2. Получить подсказку по CLI

    python -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.

  1. Содержание файла context.jsonc:

    {
        "DEBUG": false,
        "PORT_D": 8080,
        "PORT_R": 80
    }
    
  2. Содержание файла ЛюбойФайл.conf.tpl:

    server {
        listen {{ PORT_D if DEBUG else PORT_R }};
        server_name "localhost";
    
        location / {
            default_type text/html;
            return 200 'ok';
        }
    }
    
  3. Соберем файл используя команду:

    python -m templaer -c context.jsonc -f ЛюбойФайл.conf.tpl
    
  4. В итоге создастся(или перезапишитесь) новый файл ЛюбойФайл.conf, с содержанием:

    server {
        listen 80;
        server_name "localhost";
    
        location / {
            default_type text/html;
            return 200 'ok';
        }
    }
    

Готовые шаблоны проектов

Templaer удобно использовать для кастомной шаблонизации проектов. В этой главе собраны инструкции как создать, и запустить проект, из шаблона.

Django REST + PostgreSQL + Nginx + Docker

  1. Собрать проект для Django:

    templaer -e_                                     \
        -c  ./st/django_project/пример_context.jsonc \
        -ti ./st/django_project                      \
        -to ПапкаКудаСобрать                  
    
  2. Собрать и запустить контейнеры, через docker-compose:

    docker-compose build && docker-compose up
    
  3. Создать и применить миграции в БД, и собрать статические файлы в Django:

    make docker_init_django
    

  1. Собрать приложение для 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)

Source distribution for templaer 0.1.6.2
File Size Uploaded
templaer-0.1.6.2.tar.gz 68.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for templaer 0.1.6.2
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

This release

0.1.6.2 This release

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page