Cómo usar la plantilla Jinja2 en Ansible

Jinja2 es uno de los motores de plantillas basados ​​en Python más poderosos y famosos. Es más popular entre los usuarios de Ansible debido al mismo lenguaje de programación. Ayuda a mucho personal de TI de muchas maneras. La plantilla Jinja2 puede acceder a las variables en ansible. En Ansible, es necesario cambiar muchas cosas en cada servidor, lo que consume mucho tiempo. Por lo tanto, al usar la plantilla jinja2, uno puede cambiar las variables solo a esa plantilla, lo que resulta en un ahorro de tiempo y un entorno sencillo.

En ansible, se utiliza una plantilla jinja2 para acceder a las variables. Por lo tanto, cambiar la variable según sea necesario en un momento puede ayudar a los libros de jugadas ansible a ahorrar mucho tiempo. La plantilla Jinja2 viene con filtros incorporados, y los usuarios solo pueden manipular dichos filtros al configurar muchos archivos para los libros de jugadas fluidos.

Tiene muchas otras características. Algunos de ellos se enumeran a continuación.

  • Es bastante simple en el propósito de depuración.
  • La herencia de plantillas está bien soportada
  • Es muy rápido y fácil de compilar.

En este artículo, vamos a discutir los usos de la plantilla jinja2 y el proceso para configurarla.

Variables a las que accede la plantilla Jinja2

La plantilla Jinja2 puede acceder a las variables en ansible. En un nodo de control ansible, escriba un archivo de plantilla jinja2 que pueda acceder fácilmente a las variables definidas en el mismo directorio o en el libro de jugadas.

vamos a escribir un example que muestra la plantilla jinja2 accediendo y manipulando los valores accediendo a las variables. Aquí, el libro de jugadas es jinja2_var_example.yml

Ahora, ejecutemos el libro de jugadas jinja2_var_example.yml

Aquí, puede notar que el valor cambia en la salida. Como {{ }} también es una sintaxis de la plantilla jinja2, puede acceder a la variable y cambiar el valor al real.

Otro example mostrando la plantilla jinja2 accediendo a la variable. Aquí, vamos a crear una carpeta y luego escribir una plantilla jinja2 “nginx.conf.j2”, ya que j2 es la extensión de la plantilla jinja2.

                      $ mkdir jinja2_variable
                    
                      $ cd jinja2_variable/
                    
                      $ vim nginx.conf.j2
                    

Luego vamos a escribir un archivo usando plantillas jinja2 donde se usan variables. Dichas variables se pueden definir en diferentes archivos o en libros de jugadas que se pueden manipular según sea necesario en ese momento.

Debes haber notado las variables {{ http_port }} y {{ http_host }} en la captura de pantalla anterior.

Ahora, vamos a escribir el libro de jugadas que consiste en el valor real de las variables incluidas en el archivo de plantilla jinja2.

Después de que el libro de jugadas se ejecute con éxito, las variables se reemplazarán por valores reales en el archivo de la ruta de destino.

Puede notar que los valores han cambiado en la siguiente captura de pantalla.

Estos son los ejemplos que muestran que la plantilla jinja2 accede a las variables y muestra los valores reales en el resultado final.

Condicional en plantilla jinja2

La plantilla jinja2 puede utilizar sentencias condicionales como bucles for. Los bucles ayudan a iterar sobre elementos en un rango, lista, etc. Aquí estamos escribiendo un example para mostrar el bucle for utilizado en la plantilla jinja2.

Para exampleescribiremos nuestro archivo de plantilla “server_hosts.j2” como la siguiente captura de pantalla.

                      $ cat server_hosts.j2
                    

Producción:

                      {% for host in groups['all'] %}

{{ hostvars[host].ansible_facts.default_ipv4.address }} {{ hostvars[host].ansible_facts.fqdn }} {{ hostvars[host].ansible_facts.hostname }}

{% endfor %}
                    

Iterará sobre todos los hosts en el inventario. Para cada host, se mostrará el valor de todas las variables utilizadas en la plantilla.

En el nodo de control, vamos a escribir un libro de jugadas “condicional.yml” que incluye el archivo de plantilla jinja2 anterior.

                      $ sudo vim conditional.yml
                    

Ahora, estamos ejecutando el libro de jugadas “condicional.yml”

                      $ ansible-playbook conditional.yml
                    

Ahora, podemos ver el resultado en el nodo host si el archivo /etc/hosts se actualiza o no.

Es el resultado final de nuestras variables en el archivo de plantilla jinja2 iterado sobre todos los hosts en el inventario. Por lo tanto, las declaraciones condicionales como los bucles for también se pueden usar en los archivos de plantilla jinja2.

Filtros utilizados en la plantilla jinja2

Si desea que la salida sea diferente o formateada, puede usar filtros. Simplemente puede canalizar las variables con los argumentos como se muestra a continuación.

                      {{ variable | argument }}
                    

Aquí, vamos a escribir un archivo de plantilla jinja2 “jinja_filters.j2” para mostrar los filtros usados ​​en el archivo de plantilla jinja2.

                      $ vim jinja_filters.j2
                    

Vamos a escribir un libro de jugadas “filters.yml” que consta de un archivo de plantilla jinja2.

                      $ vim filters.yml
                    

Ahora, estamos ejecutando el libro de jugadas “filters.yml”

Ahora, podemos ver el resultado en el nodo host si el archivo de destino se crea con el contenido en mayúsculas o no.

Aquí, puede ver que todo el texto está en mayúsculas, ya que hemos usado el filtro canalizando el elemento de variables en el argumento en mayúsculas.

Conclusión

Puede usar tales archivos de plantilla jinja2 según sus requisitos para manipular las variables y los datos para ahorrar tiempo y un funcionamiento fluido de los libros de jugadas en ansible. También puede usar filtros para manipular los números de mayor a menor y así sucesivamente. Intente explorar la plantilla jinja2 para obtener más funciones. ¡Gracias!

Related Posts