0 added
0 removed
Original
2026-01-01
Modified
2026-02-19
1
<p>Jinja2 называют движком шаблонов, который превращает статичные конфиги Ansible в динамичные и умные. Вместе они помогают генерировать персонализированные конфиги для сотен серверов буквально в несколько строк кода - без копипаста и ручной правки каждого файла.</p>
1
<p>Jinja2 называют движком шаблонов, который превращает статичные конфиги Ansible в динамичные и умные. Вместе они помогают генерировать персонализированные конфиги для сотен серверов буквально в несколько строк кода - без копипаста и ручной правки каждого файла.</p>
2
<p>Что важно знать в Jinja для Ansible?</p>
2
<p>Что важно знать в Jinja для Ansible?</p>
3
<p>1️⃣ Основы синтаксиса</p>
3
<p>1️⃣ Основы синтаксиса</p>
4
<ul><li>{{ переменная }} - подстановка значений</li>
4
<ul><li>{{ переменная }} - подстановка значений</li>
5
<li>{% ... %} - управляющие конструкции (условия, циклы)</li>
5
<li>{% ... %} - управляющие конструкции (условия, циклы)</li>
6
<li>{# комментарий #} - комментарии в шаблонах</li>
6
<li>{# комментарий #} - комментарии в шаблонах</li>
7
</ul><p>2️⃣ Условия (if-else) и циклы (for)</p>
7
</ul><p>2️⃣ Условия (if-else) и циклы (for)</p>
8
{% 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 %}<p>3️⃣ Фильтры - мощь Jinja</p>
8
{% 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 %}<p>3️⃣ Фильтры - мощь Jinja</p>
9
<ul><li>default - значение по умолчанию: {{ var | default('default_value') }}</li>
9
<ul><li>default - значение по умолчанию: {{ var | default('default_value') }}</li>
10
<li>map - обработка списков: {{ users | map(attribute='name') | list }}</li>
10
<li>map - обработка списков: {{ users | map(attribute='name') | list }}</li>
11
<li>regex_replace - замена по регулярке: {{ string | regex_replace('^(.*)$', 'prefix-\1') }}</li>
11
<li>regex_replace - замена по регулярке: {{ string | regex_replace('^(.*)$', 'prefix-\1') }}</li>
12
</ul><p>4️⃣ Работа с Ansible</p>
12
</ul><p>4️⃣ Работа с Ansible</p>
13
<ul><li>Шаблоны (template модуль) - генерация конфигов (nginx, systemd и др.)</li>
13
<ul><li>Шаблоны (template модуль) - генерация конфигов (nginx, systemd и др.)</li>
14
<li>Динамические переменные - hostvars, groups, ansible_facts</li>
14
<li>Динамические переменные - hostvars, groups, ansible_facts</li>
15
<li>set_fact + Jinja2 - вычисление значений на лету</li>
15
<li>set_fact + Jinja2 - вычисление значений на лету</li>
16
</ul><p>5️⃣ Полезные функции</p>
16
</ul><p>5️⃣ Полезные функции</p>
17
<ul><li>join - объединение списка в строку: {{ list | join(',') }}</li>
17
<ul><li>join - объединение списка в строку: {{ list | join(',') }}</li>
18
<li>split - разбиение строки: {{ path | split('/') }}</li>
18
<li>split - разбиение строки: {{ path | split('/') }}</li>
19
</ul><p>to_json / to_yaml - сериализация данных</p>
19
</ul><p>to_json / to_yaml - сериализация данных</p>
20
<p><strong>Генерация конфига Nginx в Ansible:</strong></p>
20
<p><strong>Генерация конфига Nginx в Ansible:</strong></p>
21
- name: Generate Nginx config template: src: nginx.conf.j2 dest: /etc/nginx/nginx.conf<p><strong>nginx.conf.j2:</strong></p>
21
- name: Generate Nginx config template: src: nginx.conf.j2 dest: /etc/nginx/nginx.conf<p><strong>nginx.conf.j2:</strong></p>
22
server { listen {{ nginx_port | default(80) }}; server_name {{ server_name }}; root {{ web_root }}; }<p><strong>Зачем это нужно?</strong></p>
22
server { listen {{ nginx_port | default(80) }}; server_name {{ server_name }}; root {{ web_root }}; }<p><strong>Зачем это нужно?</strong></p>
23
<ul><li><strong>Ваши конфиги становятся универсальными.</strong>Один шаблон подстраивается под любые окружения - dev, stage или prod. Меняете переменные, а система сама генерирует нужные версии файлов.</li>
23
<ul><li><strong>Ваши конфиги становятся универсальными.</strong>Один шаблон подстраивается под любые окружения - dev, stage или prod. Меняете переменные, а система сама генерирует нужные версии файлов.</li>
24
<li><strong>Код выглядит чище и понятнее.</strong>Больше не нужно дублировать одни и те же блоки настроек для каждого сервера - шаблоны собирают всё в аккуратные структуры, как конструктор.</li>
24
<li><strong>Код выглядит чище и понятнее.</strong>Больше не нужно дублировать одни и те же блоки настроек для каждого сервера - шаблоны собирают всё в аккуратные структуры, как конструктор.</li>
25
<li><strong>Ansible раскрывает весь потенциал.</strong>Фильтры, условия и циклы Jinja2 превращают статичные плейбуки в динамичные сценарии и даже сложные задачи решаются парой элегантных строк.</li>
25
<li><strong>Ansible раскрывает весь потенциал.</strong>Фильтры, условия и циклы Jinja2 превращают статичные плейбуки в динамичные сценарии и даже сложные задачи решаются парой элегантных строк.</li>
26
</ul><p>📹 Продолжить знакомство с Ansible, посмотреть на статистику, логи, понаблюдать за реальной загрузкой системы, провести тесты на устойчивость и производительность -<strong>на бесплатном вебинаре "Ansible в действии: развернём кластер с Kuberspray и запустим AI-приложение".</strong>Встречаемся 16 апреля 19:00 МСК.</p>
26
</ul><p>📹 Продолжить знакомство с Ansible, посмотреть на статистику, логи, понаблюдать за реальной загрузкой системы, провести тесты на устойчивость и производительность -<strong>на бесплатном вебинаре "Ansible в действии: развернём кластер с Kuberspray и запустим AI-приложение".</strong>Встречаемся 16 апреля 19:00 МСК.</p>
27
<p><strong>Занять место и получить ссылку для подключения -<a>в боте.</a></strong></p>
27
<p><strong>Занять место и получить ссылку для подключения -<a>в боте.</a></strong></p>