
Cette sous-section couvre la génération de fichiers de configuration via Jinja2 — la dernière brique pour passer du playbook qui modifie ligne par ligne (lineinfile) au playbook qui génère un fichier complet depuis un template paramétré. Vous apprenez la syntaxe Jinja2 (au-delà de {{ var }}), les filtres profonds (regex_search, groupby, from_yaml), les tests (is defined, is mapping), le module template avec ses options (validate, backup, lstrip_blocks), et les anti-patterns à éviter (notamment lineinfile quand template ferait mieux).
C’est le pattern le plus puissant d’Ansible : un seul template .j2 génère un nginx.conf parfait sur 50 webservers, en lisant un dict de variables différent par hôte.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- La syntaxe Jinja2 complète :
{{ }},{% %},{# #}, contextes, whitespace control - Les filtres avancés :
regex_search,regex_findall,groupby,flatten,from_yaml,to_nice_yaml - Les tests Jinja :
is defined,is none,is mapping,is sequence,is regex - Le module
ansible.builtin.template:validate:,backup:,force:,lstrip_blocks:,trim_blocks: - Quand utiliser
template:vslineinfile:/blockinfile:— anti-patterns à éviter
Prérequis
Section intitulée « Prérequis »- Avoir lu Filtres Jinja2 essentiels (la base des filtres) ;
- Avoir lu Variables — déclaration (les variables alimentent les templates).
Le parcours en 5 pages
Section intitulée « Le parcours en 5 pages » Jinja2 — syntaxe de base `{{ }}`, `{% %}`, `{# #}`, whitespace control, contextes (template vs Jinja inline)
Filtres Jinja2 avancés regex_search, regex_findall, groupby, flatten, from_yaml, to_nice_json, password_hash, b64encode
Tests Jinja2 is defined, is none, is mapping, is sequence, is regex, is divisibleby
Module template ansible.builtin.template — validate:, backup:, force:, lstrip_blocks:, trim_blocks:
lineinfile vs template Quand utiliser lineinfile/blockinfile vs template. Anti-patterns et critères de choix.
La place dans la RHCE EX294
Section intitulée « La place dans la RHCE EX294 »| Objectif RHCE | Couvert par |
|---|---|
| Templates Jinja2 | Jinja2 base + Filtres + Tests + Module template |
| Générer un nginx.conf, sshd_config, conf applicatif | Module template avec validate: |
| Anti-patterns lineinfile | lineinfile vs template |
Pièges classiques à anticiper
Section intitulée « Pièges classiques à anticiper »- Whitespace control oublié : un template avec une boucle qui produit des lignes vides indésirables. Utiliser
{%- ... -%}oulstrip_blocks: true+trim_blocks: true. validate:non posé surtemplate:: générer un nginx.conf cassé sans le savoir. Toujours poservalidate: '/usr/sbin/nginx -t -c %s'ou équivalent sur les services critiques.- Confondre filtres et tests :
defaultest un filtre ({{ var | default('x') }}),definedest un test ({% if var is defined %}). - Utiliser
lineinfile:pour gérer 30 lignes : c’est le job detemplate:. Lineinfile sert pour 1-2 lignes ponctuelles.
Prochaines étapes
Section intitulée « Prochaines étapes » Jinja2 — syntaxe de base Démarrer la sous-section par la syntaxe Jinja2 (au-delà de {{ var }})
Retour à Contrôle de flux Si certaines notions de when/loop/block vous manquent pour les templates
Sous-section suivante : Quiz Écrire du code Tester ses connaissances sur les 5 sous-sections (~50 questions)