Ответ
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