Говорят, идеальных конфигов не бывает. Jinja2: «Позвольте не согласиться»
2026-02-19 19:06 Diff

Jinja2 называют движком шаблонов, который превращает статичные конфиги Ansible в динамичные и умные. Вместе они помогают генерировать персонализированные конфиги для сотен серверов буквально в несколько строк кода — без копипаста и ручной правки каждого файла.

Что важно знать в Jinja для Ansible?

1️⃣ Основы синтаксиса

  • {{ переменная }} – подстановка значений
  • {% ... %} – управляющие конструкции (условия, циклы)
  • {# комментарий #} – комментарии в шаблонах

2️⃣ Условия (if-else) и циклы (for)

{% if ansible_os_family == "Debian" %} apt install nginx {% elif ansible_os_family == "RedHat" %} yum install nginx {% endif %} {% for user in users %} - name: {{ user.name }} uid: {{ user.uid }} {% endfor %}

3️⃣ Фильтры – мощь Jinja

  • default – значение по умолчанию: {{ var | default('default_value') }}
  • map – обработка списков: {{ users | map(attribute='name') | list }}
  • regex_replace – замена по регулярке: {{ string | regex_replace('^(.*)$', 'prefix-\1') }}

4️⃣ Работа с Ansible

  • Шаблоны (template модуль) – генерация конфигов (nginx, systemd и др.)
  • Динамические переменные – hostvars, groups, ansible_facts
  • set_fact + Jinja2 – вычисление значений на лету

5️⃣ Полезные функции

  • join – объединение списка в строку: {{ list | join(',') }}
  • split – разбиение строки: {{ path | split('/') }}

to_json / to_yaml – сериализация данных

Генерация конфига Nginx в Ansible:

- name: Generate Nginx config template: src: nginx.conf.j2 dest: /etc/nginx/nginx.conf

nginx.conf.j2:

server { listen {{ nginx_port | default(80) }}; server_name {{ server_name }}; root {{ web_root }}; }

Зачем это нужно?

  • Ваши конфиги становятся универсальными. Один шаблон подстраивается под любые окружения — dev, stage или prod. Меняете переменные, а система сама генерирует нужные версии файлов.
  • Код выглядит чище и понятнее. Больше не нужно дублировать одни и те же блоки настроек для каждого сервера — шаблоны собирают всё в аккуратные структуры, как конструктор.
  • Ansible раскрывает весь потенциал. Фильтры, условия и циклы Jinja2 превращают статичные плейбуки в динамичные сценарии и даже сложные задачи решаются парой элегантных строк.

📹 Продолжить знакомство с Ansible, посмотреть на статистику, логи, понаблюдать за реальной загрузкой системы, провести тесты на устойчивость и производительность — на бесплатном вебинаре «Ansible в действии: развернём кластер с Kuberspray и запустим AI-приложение». Встречаемся 16 апреля 19:00 МСК.

Занять место и получить ссылку для подключения — в боте.