Boucles dans les templates
# templates/hosts.j2
# Fichier genere par Ansible - ne pas modifier manuellement
{% for host in groups['webservers'] %}
{{ hostvars[host]['ansible_default_ipv4']['address'] }} {{ host }}
{% endfor %}
# templates/vhosts.conf.j2
{% for vhost in virtual_hosts %}
server {
listen {{ vhost.port | default(80) }};
server_name {{ vhost.name }};
root {{ vhost.root }};
{% for location in vhost.locations | default([]) %}
location {{ location.path }} {
proxy_pass {{ location.backend }};
}
{% endfor %}
}
{% endfor %}
Conditions dans les templates
# templates/app.conf.j2
[application]
name = {{ app_name }}
port = {{ app_port }}
{% if env == "production" %}
debug = false
log_level = warning
{% elif env == "staging" %}
debug = true
log_level = info
{% else %}
debug = true
log_level = debug
{% endif %}
{% if ssl_enabled | default(false) %}
ssl_certificate = {{ ssl_cert_path }}
ssl_key = {{ ssl_key_path }}
{% endif %}
Boucles avec conditions
# templates/firewall.conf.j2
{% for rule in firewall_rules %}
{% if rule.state == "enabled" %}
-A INPUT -p {{ rule.protocol }} --dport {{ rule.port }} -j ACCEPT
{% endif %}
{% endfor %}
# templates/sudoers.j2
{% for user in sudo_users %}
{% if user.nopasswd | default(false) %}
{{ user.name }} ALL=(ALL) NOPASSWD: ALL
{% else %}
{{ user.name }} ALL=(ALL) ALL
{% endif %}
{% endfor %}
Controle des espaces blancs
# Le tiret (-) supprime les espaces/lignes vides
{% for item in liste -%}
{{ item }}
{%- endfor %}
# Utile pour generer des fichiers propres sans lignes vides
Playbook complet avec templates
---
- name: Deployer la configuration
hosts: webservers
vars:
app_name: myapp
http_port: 80
env: production
virtual_hosts:
- name: app.example.com
port: 80
root: /var/www/app
- name: api.example.com
port: 8080
root: /var/www/api
tasks:
- name: Deployer la config Nginx
template:
src: templates/vhosts.conf.j2
dest: /etc/nginx/sites-available/{{ app_name }}
notify: Recharger Nginx
- name: Deployer la config applicative
template:
src: templates/app.conf.j2
dest: /etc/myapp/app.conf
notify: Redemarrer l'application
Debug : Utilisez
ansible -m template -a "src=template.j2 dest=/tmp/test" pour tester un template localement.