variable tutorial template last jinja for comment ansible jinja2 ansible-playbook ansible-template

ansible - tutorial - jinja2 declare variable



¿Cómo puedo probar las plantillas jinja2 en ansible? (2)

A veces necesito probar algunas plantillas jinja2 que uso en mis roles de ansible. ¿Cuál es la forma más sencilla de hacer esto?

Por ejemplo, tengo una plantilla (test.j2):

{% if users is defined and users %} {% for user in users %}{{ user }} {% endfor %} {% endif %}

y vars (en group_vars / all):

--- users: - Mike - Smith - Klara - Alex


En este momento existen 4 variantes diferentes:

1_Online (utilizando https://cryptic-cliffs-32040.herokuapp.com/ )
Basado en el jinja2-live-parser .

2_Interactivo (usando python y library jinja2, PyYaml)

import yaml from jinja2 import Template >>> template = Template(""" ... {% if users is defined and users %} ... {% for user in users %}{{ user }} ... {% endfor %} ... {% endif %} ... """) >>> values = yaml.load(""" ... --- ... users: ... - Mike ... - Smith ... - Klara ... - Alex ... """) >>> print "{}".format(template.render(values)) Mike Smith Klara Alex

3_Ansible (usando --check)
Crear prueba de libro de jugadas jinja2test.yml:

--- - hosts: 127.0.0.1 tasks: - name: Test jinja2template template: src=test.j2 dest=test.conf

y ejecutarlo:

ansible-playbook jinja2test.yml --check --diff --connection=local

salida de muestra:

PLAY [127.0.0.1] ************************************************************** GATHERING FACTS *************************************************************** ok: [127.0.0.1] TASK: [Test jinja2template] *************************************************** --- before: test.conf +++ after: /Users/user/ansible/test.j2 @@ -0,0 +1,4 @@ +Mike +Smith +Klara +Alex changed: [127.0.0.1] PLAY RECAP ******************************************************************** 127.0.0.1 : ok=2 changed=1 unreachable=0 failed=0

4_Ansible (usando la plantilla -m) gracias por @artburkart

Hacer un archivo llamado test.txt.j2

{% if users is defined and users %} {% for user in users %} {{ user }} {% endfor %} {% endif %}

Llama a ansible como tal:

ansible all -i "localhost," -c local -m template -a "src=test.txt.j2 dest=./test.txt" --extra-vars=''{"users": ["Mike", "Smith", "Klara", "Alex"]}''

test.txt un archivo llamado test.txt en el directorio actual, que contendrá la salida de la plantilla test.txt.j2 evaluada.

Entiendo que esto no usa directamente un archivo vars, pero creo que es la forma más sencilla de probar una plantilla sin usar dependencias externas. Además, creo que hay algunas diferencias entre lo que proporciona la biblioteca jinja2 y lo que proporciona ansible, por lo que usar ansible evita directamente cualquier discrepancia. Cuando el JSON que se alimenta a --extra-vars satisface sus necesidades, puede convertirlo a YAML y seguir su camino.


Si tiene una plantilla jinja2 llamada test.j2 y un archivo vars ubicado en group_vars/all.yml , puede probar la plantilla con el siguiente comando:

ansible all -i localhost, -c local -m template -a "src=test.j2 dest=./test.txt" --extra-vars=@group_vars/all.yml

Se generará un archivo llamado test.txt en el directorio actual, que contendrá la salida de la plantilla test.j2 evaluada.

Creo que esta es la forma más sencilla de probar una plantilla sin utilizar dependencias externas. Además, hay diferencias entre lo que proporciona la biblioteca jinja2 y lo que proporciona ansible, por lo que usar ansible evita directamente cualquier discrepancia. También es posible probar variables ad-hoc sin crear un archivo vars adicional utilizando JSON:

ansible all -i "localhost," -c local -m template -a "src=test.j2 dest=./test.txt" --extra-vars=''{"users": ["Mike", "Smith", "Klara", "Alex"]}''