Ответ
В 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) из одного плейбука.