Блог Слёрм

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

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 МСК.

Занять место и получить ссылку для подключения — в боте.
2025-04-07 14:00 Ansible