Techniques avancées de Jinja2
Dans cette étape finale, nous allons explorer quelques techniques avancées de Jinja2, notamment les macros et les filtres. Les macros sont des extraits de modèle réutilisables, similaires aux fonctions dans les langages de programmation.
Créez un nouveau fichier de modèle nommé advanced.j2 :
cd ~/project/templates
nano advanced.j2
Ajoutez le contenu suivant :
{% macro render_list(title, items) %}
{{ title }}:
{% for item in items %}
- {{ item }}
{% endfor %}
{% endmacro %}
1. Using a macro:
{{ render_list("Fruits", fruits) }}
{{ render_list("Vegetables", vegetables) }}
2. Using set:
{% set greeting = "Hello, " + name + "!" %}
{{ greeting }}
3. Custom filter (defined in playbook):
{{ complex_data | to_nice_json }}
4. Whitespace control:
{% for item in fruits -%}
{{ item }}
{%- if not loop.last %}, {% endif %}
{%- endfor %}
5. Raw block (no processing):
{% raw %}
This {{ will_not_be_processed }}
{% endraw %}
6. Include another template:
{% include 'simple_include.j2' %}
Maintenant, créons le fichier d'inclusion simple. Créez un nouveau fichier nommé simple_include.j2 :
nano simple_include.j2
Ajoutez le contenu suivant :
This is content from an included template.
Current user: {{ ansible_user_id }}
Maintenant, créons un playbook pour utiliser ce modèle avancé. Revenez à la racine du projet et créez un nouveau fichier nommé use_advanced.yml :
cd ~/project
nano use_advanced.yml
Ajoutez le contenu suivant :
---
- name: Use advanced Jinja2 techniques
hosts: localhost
vars:
name: "Ansible Expert"
fruits:
- apple
- banana
- cherry
vegetables:
- carrot
- potato
- broccoli
complex_data:
key1: value1
key2:
- item1
- item2
custom_filters:
to_nice_json: "{{ '(' ~ ((complex_data | to_json) | replace('\"', '\\\"')) ~ ')' | from_json | to_nice_json }}"
tasks:
- name: Create file from template
template:
src: templates/advanced.j2
dest: /tmp/advanced.txt
- name: Display file contents
command: cat /tmp/advanced.txt
register: file_contents
- name: Show file contents
debug:
var: file_contents.stdout_lines
Ce playbook démontre des techniques avancées de Jinja2, notamment les macros, les filtres personnalisés, le contrôle des espaces blancs et l'inclusion d'autres modèles.
Exécutez le playbook :
ansible-playbook use_advanced.yml
La sortie vous montrera comment ces techniques avancées de Jinja2 fonctionnent en pratique.