Técnicas Avançadas Jinja2
Nesta etapa final, exploraremos algumas técnicas avançadas de Jinja2, incluindo macros e filtros. Macros são trechos de template reutilizáveis, semelhantes a funções em linguagens de programação.
Crie um novo arquivo de template chamado advanced.j2:
cd ~/project/templates
nano advanced.j2
Adicione o seguinte conteúdo:
{% macro render_list(title, items) %}
{{ title }}:
{% for item in items %}
- {{ item }}
{% endfor %}
{% endmacro %}
1. Usando uma macro:
{{ render_list("Fruits", fruits) }}
{{ render_list("Vegetables", vegetables) }}
2. Usando set:
{% set greeting = "Hello, " + name + "!" %}
{{ greeting }}
3. Filtro personalizado (definido no playbook):
{{ complex_data | to_nice_json }}
4. Controle de espaço em branco:
{% for item in fruits -%}
{{ item }}
{%- if not loop.last %}, {% endif %}
{%- endfor %}
5. Bloco raw (sem processamento):
{% raw %}
This {{ will_not_be_processed }}
{% endraw %}
6. Incluir outro template:
{% include 'simple_include.j2' %}
Agora, vamos criar o arquivo de inclusão simples. Crie um novo arquivo chamado simple_include.j2:
nano simple_include.j2
Adicione o seguinte conteúdo:
This is content from an included template.
Current user: {{ ansible_user_id }}
Agora, vamos criar um playbook para usar este template avançado. Volte para a raiz do projeto e crie um novo arquivo chamado use_advanced.yml:
cd ~/project
nano use_advanced.yml
Adicione o seguinte conteúdo:
---
- 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
Este playbook demonstra técnicas avançadas de Jinja2, incluindo macros, filtros personalizados, controle de espaço em branco e inclusão de outros templates.
Execute o playbook:
ansible-playbook use_advanced.yml
A saída mostrará como essas técnicas avançadas de Jinja2 funcionam na prática.