HTML Diff
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>