Что такое шаблон (Template) в Ansible?

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

Ответ

В Ansible шаблон (Template) — это файл на основе Jinja2, используемый для генерации динамических конфигурационных файлов на целевых хостах. Модуль template копирует такой файл, предварительно обработав все выражения и переменные Jinja2.

Ключевые особенности:

  • Файлы шаблонов обычно имеют расширение .j2.
  • Поддерживают полный синтаксис Jinja2: переменные, условия, циклы, фильтры и макросы.
  • Имеют доступ ко всем переменным Ansible: hostvars, group_vars, playbook-переменные и факты.

Пример шаблона Nginx конфигурации (templates/nginx.conf.j2):

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

    {% if enable_gzip %}
    gzip on;
    gzip_types text/plain application/json;
    {% endif %}
}

Использование в плейбуке:

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

Практическое применение: Я использовал шаблоны для управления конфигурациями веб-серверов (Nginx/Apache), файлами сервисов systemd, настройками приложений и файлами переменных окружения, что позволяло разворачивать идентичные среды с разными параметрами (dev, staging, prod) из одного плейбука.