
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)