GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo usar la plantilla Jinja2 en Ansible Playbook

Jinja2 es un motor de plantillas basado en Python potente y fácil de usar que resulta útil en un entorno de TI con varios servidores donde las configuraciones varían cada dos por tres. La creación de archivos de configuración estáticos para cada uno de estos nodos es tediosa y puede que no sea una opción viable, ya que consumirá más tiempo y energía. Y aquí es donde entran las plantillas.

Las plantillas Jinja2 son archivos de plantilla simples que almacenan variables que pueden cambiar de vez en cuando. Cuando se ejecutan Playbooks, estas variables se reemplazan por valores reales definidos en Ansible Playbooks. De esta manera, las plantillas ofrecen una solución eficiente y flexible para crear o modificar archivos de configuración con facilidad.

En esta guía, nos centraremos en cómo puede configurar y usar la plantilla Jinja2 en el libro de jugadas de Ansible.

Arquitectura de plantilla

Un archivo de plantilla Jinja2 es un archivo de texto que contiene variables que se evalúan y reemplazan por valores reales durante el tiempo de ejecución o la ejecución del código. En un archivo de plantilla Jinja2, encontrará las siguientes etiquetas:

  • {{ }} :estas llaves dobles son las etiquetas más utilizadas en un archivo de plantilla y se utilizan para incrustar variables y, en última instancia, imprimir su valor durante la ejecución del código. Por ejemplo, una sintaxis simple que usa llaves dobles es la siguiente:{{ webserver }} se está ejecutando en  {{ nginx-version }}
  • {%  %} :Estos se utilizan principalmente para declaraciones de control como bucles y declaraciones if-else.
  • {#  #} :Estos denotan comentarios que describen una tarea.

En la mayoría de los casos, los archivos de plantilla de Jinja2 se utilizan para crear archivos o reemplazar archivos de configuración en los servidores. Aparte de eso, puede realizar declaraciones condicionales como bucles y if-else declaraciones y transforme los datos usando filtros y mucho más.

Los archivos de plantilla llevan el .j2 extensión, lo que implica que la plantilla Jinja2 está en uso.

Creación de archivos de plantilla

Aquí hay un ejemplo de un archivo de plantilla Jinja2 example_template.j2 que usaremos para crear un nuevo archivo con las variables que se muestran

Hey guys!
Apache webserver {{ version_number }} is running on {{ server }}
Enjoy!

Aquí, las variables son {{ version_number }} &{{ servidor }

Estas variables se definen en un libro de jugadas y se reemplazarán por valores reales en el archivo YAML del libro de jugadas ejemplo1.yml a continuación.

Cuando se ejecuta el libro de jugadas, las variables en el archivo de plantilla se reemplazan por los valores reales y se crea un nuevo archivo o se reemplaza un file.txt ya existente. en la ruta de destino.

Desde la ejecución del libro de jugadas, vea el destino y observe que las variables han sido reemplazadas por los valores definidos en el archivo del libro de jugadas de Ansible.

Para tener una mejor idea de cómo puede enviar archivos de configuración, vamos a crear una plantilla Jinja2 que crea un index.html archivo en la raíz web o directorio de documentos /var/www/html en un servidor CentOS 7. Apache ya se está ejecutando y muestra la página de bienvenida predeterminada como se muestra,

El archivo de plantilla, index.html.j2 aparece como se muestra. Observe la presencia de ansible_hostname variable que es una variable incorporada. Cuando se ejecuta un libro de jugadas, este será reemplazado por el nombre de host del servidor web.

<html>
    <center><h1> The Apache webserver is running on {{ ansible_hostname }} </h1>
    </center>
</html>

El archivo del libro de jugadas se muestra a continuación.

Cuando se ejecuta el libro de jugadas, se crea un nuevo archivo index.html y, como puede ver, la variable ansible_hostname ha sido reemplazada por el nombre de host real del servidor, en este caso, Centos-7.

Plantilla Jinja2 con Condicionales

Las plantillas de Jinja2 también se pueden usar con declaraciones condicionales, como bucles for para iterar sobre una lista de elementos. Considere el Playbook example2.yml como se muestra en la imagen a continuación:Vamos a crear una plantilla que iterará sobre la lista de modelos de automóviles llamados "automóviles" e imprimirá el resultado en el archivo de destino file2.txt.

El bucle for en el archivo de plantilla Jinja2:example2_template.j2 – es como se muestra

Cuando se ejecuta el libro de jugadas, el ciclo itera sobre la lista de autos e imprime los modelos de autos en el archivo de destino. Puede usar el comando cat para examinar la salida y verificar dónde se encuentran los modelos en el archivo.

Plantilla Jinja2 con filtros

Los filtros se utilizan para alterar la apariencia de los datos de salida o formato. Esto funciona canalizando el nombre de la variable como se muestra:

{{variable | argumento }}

Veamos algunos casos de uso:

a) Transformar cadenas en formato de mayúsculas o minúsculas

Por ejemplo, para imprimir los valores en la lista anterior en caracteres en mayúscula usando la plantilla, canalice el elemento variable en el argumento 'SUPERIOR' como se muestra:{{ elemento | superior }}

Cuando se ejecuta el libro de jugadas, los valores se transforman en mayúsculas

Si los valores están en minúsculas desde el principio, utilice el argumento 'inferior'.

{{ artículo | inferior }}

b) Usar filtros de lista para mostrar valores máximos y mínimos

Si está trabajando con matrices o listas dentro de la plantilla como se muestra, puede optar por imprimir sus valores preferidos en función de ciertos criterios.

Por ejemplo, para imprimir el valor mínimo en una lista, pase la lista completa al 'min filtrar como se muestra.

{{ [ 100, 37, 45, 65, 60, 78 ] | min }}     =>   37

Para obtener el valor máximo, utilice el filtro  'max' .

{{ [ 100, 37, 45, 65, 60, 78 ] | máx }}     =>   100

Puede obtener valores únicos de una lista de valores duplicados en una matriz usando el filtro único como se muestra:

{{ [ 3, 4, 3, 3, 4, 2, 2 ] | único }}     =>   3,4,2

c) Reemplazar un valor de cadena con otro

Además, puede reemplazar una cadena con una nueva usando el argumento de reemplazo como se muestra

{{ ” Hola chicos” | replace ("chicos", "mundo") }} => Hola mundo

En el ejemplo anterior, los chicos de cadena se reemplazarán con mundo y ahora la declaración dirá:

Hola mundo

Estos son solo algunos filtros. Hay toneladas de filtros integrados que puede usar para manipular el resultado de la ejecución de Ansible Playbook.

La plantilla Jinja2 es una solución ideal cuando se manejan variables dinámicas en archivos de configuración. Es una opción mucho más eficiente que cambiar los valores manualmente, lo que a menudo lleva mucho tiempo y puede ser bastante tedioso. Sus comentarios sobre este artículo son bienvenidos.

Leer también :Cómo reemplazar cadenas y líneas con Ansible

Leer también :  Cómo crear roles de Ansible y usarlos en Playbook


Linux
  1. Cómo crear un archivo en Ansible

  2. Cómo crear un libro de jugadas de Ansible

  3. Cómo pasar variables adicionales a un libro de jugadas de Ansible

  4. ¿Cómo usar el tipo de archivo en Vim?

  5. ¿Cómo usar chmod para cambiar el permiso del archivo?

Cómo definir y usar controladores en Ansible Playbooks

Cómo crear y ejecutar un archivo de libro de jugadas de Ansible

Cómo usar la plantilla Jinja2 en Ansible

Cómo usar Ansible para configurar Vim

Cómo usar el comando lsof en Linux

¿Cómo usar gzip en Linux?