Jinja2 est un moteur de templating Python intégré à Ansible. Il permet de générer dynamiquement des fichiers en remplaçant des variables par leurs valeurs.
| Élément | Syntaxe | Usage |
|---|---|---|
| Variable | {{ variable }} |
Insertion de valeur |
| Condition | {% if condition %}...{% endif %} |
Logique conditionnelle |
| Boucle | {% for item in list %}...{% endfor %} |
Itération |
| Commentaire | {# commentaire #} |
Commentaire invisible |
| Opérateur | {{ var1 + var2 }} |
Calculs simples |
Fichier: templates/nginx.conf.j2
server {
listen {{ http_port | default(80) }};
server_name {{ server_name | default('localhost') }};
{% if ssl_enabled | default(false) %}
listen 443 ssl;
ssl_certificate {{ ssl_cert_path }};
ssl_certificate_key {{ ssl_key_path }};
{% endif %}
location / {
proxy_pass http://{{ backend_server | default('127.0.0.1:8080') }};
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# Fourni par Ansible
# OS: {{ ansible_distribution }} {{ ansible_distribution_version }}
# IP: {{ ansible_default_ipv4.address }}
}
name: Déploiement de la configuration nginx
template:
src: templates/nginx.conf.j2
dest: /etc/nginx/nginx.conf
owner: root
group: root
mode: '0644'
notify: Redémarrage nginx
Majuscules/minuscules
{{ nom_utilisateur | upper }} # ALICE
{{ nom_utilisateur | lower }} # alice
{{ nom_utilisateur | capitalize }} # Alice
Valeurs par défaut
{{ variable | default("valeur") }}
Concaténation
{{ prefixe ~ "test" ~ suffixe }}
Manipulation de liste
{{ list_items | join(", ") }}
{{ list_items | first }}
{{ list_items | last }}
Mathématiques
{{ quantity * price }}
{% if variable is defined %}
Variable existe
{% endif %}
{% if variable is none %}
Variable est vide
{% endif %}
{% if version is version('2.0', '>=') %}
Version >= 2.0
{% endif %}
{% if list | length > 0 %}
Liste non vide
{% endif %}
| Module | Usage | Traitement Jinja2 |
|---|---|---|
copy |
Copie de fichiers statiques | Non |
template |
Fichiers avec variables | Oui |
name: Copier un fichier statique
copy:
src: files/id_rsa
dest: /home/user/.ssh/id_rsa
mode: '0600'
name: Déployer une configuration personnalisée
template:
src: config.yml.j2
dest: /etc/app/config.yml
Créer un template iptables.rules.j2 permettant de définir les ports autorisés selon l'environnement (dev/prod).
Générer des fichiers database.yml différents pour dev, staging et prod en utilisant des variables conditionnelles.