Какой шаблонизатор используется в Ansible?

«Какой шаблонизатор используется в Ansible?» — вопрос из категории Ansible, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Основные возможности Jinja2 в Ansible:

  • Подстановка переменных: {{ nginx_port }}
  • Условные операторы: {% if enable_ssl %} ... {% endif %}
  • Циклы: {% for host in backend_hosts %} ... {% endfor %}
  • Фильтры: Для преобразования данных, например {{ variable | upper }} или {{ list | join(",") }}.
  • Макросы и наследование шаблонов: Для создания переиспользуемых компонентов.

Практический пример: Шаблон для конфигурации Nginx (templates/nginx.conf.j2).

# nginx.conf.j2
server {
    listen {{ nginx_listen_port }} default_server;
    server_name {{ server_name }};
    root {{ web_root }};

    {% if enable_ssl %}
    listen 443 ssl;
    ssl_certificate /etc/ssl/certs/{{ ssl_cert_name }}.crt;
    ssl_certificate_key /etc/ssl/private/{{ ssl_cert_name }}.key;
    {% endif %}

    location / {
        proxy_pass http://backend/;
        proxy_set_header Host $host;
    }

    # Динамическое добавление бэкендов
    upstream backend {
        {% for host in backend_servers %}
        server {{ host.ip }}:{{ host.port }};
        {% endfor %}
    }
}

Задача в плейбуке для применения шаблона:

- name: Generate Nginx configuration from template
  ansible.builtin.template:
    src: nginx.conf.j2
    dest: /etc/nginx/sites-available/default
    owner: root
    group: root
    mode: '0644'
  notify: restart nginx