Templates Jinja2 20 min de lecture

Syntaxe Jinja2 dans Ansible

Les bases de Jinja2

Jinja2 est le moteur de templates utilise par Ansible. Il permet de generer des fichiers de configuration dynamiques.

# Trois types de delimiteurs :
{{ variable }}          # Afficher une variable
{% instruction %}       # Logique (if, for, etc.)
{# commentaire #}      # Commentaire (non inclus dans la sortie)

Variables dans les templates

# templates/nginx.conf.j2
server {
    listen {{ http_port }};
    server_name {{ server_name }};
    root {{ document_root }};

    # Informations du serveur
    # Hostname: {{ ansible_hostname }}
    # IP: {{ ansible_default_ipv4.address }}
    # OS: {{ ansible_distribution }} {{ ansible_distribution_version }}
}

Filtres Jinja2

# Filtres courants
{{ variable | default("valeur_par_defaut") }}
{{ variable | upper }}
{{ variable | lower }}
{{ variable | capitalize }}
{{ liste | join(", ") }}
{{ variable | int }}
{{ variable | replace("ancien", "nouveau") }}
{{ chemin | basename }}
{{ chemin | dirname }}
{{ dictionnaire | to_nice_yaml }}
{{ dictionnaire | to_nice_json }}

# Exemple dans un template
server_name {{ server_name | default("localhost") }};
worker_processes {{ ansible_processor_cores | default(2) }};

Utiliser le module template

# Structure du projet
project/
  playbook.yml
  templates/
    nginx.conf.j2
    app.conf.j2

# Dans le playbook
- name: Deployer la config Nginx
  template:
    src: templates/nginx.conf.j2
    dest: /etc/nginx/sites-available/{{ app_name }}
    owner: root
    group: root
    mode: "0644"
  notify: Recharger Nginx
Convention : Les templates Jinja2 utilisent l'extension .j2 pour les distinguer des fichiers statiques.