Ansible

Cómo utilizar el módulo de plantilla de Ansible

Cómo utilizar el módulo de plantilla de Ansible
El Ansible plantilla El módulo se utiliza principalmente para copiar archivos del cliente Ansible (donde está instalado Ansible) a los hosts Ansible (administrados por Ansible). El beneficio de usar el plantilla módulo, en lugar del Copiar módulo, es que el Ansible plantilla El módulo puede usar el lenguaje de plantillas Jinja2. Jinja2 es un poderoso lenguaje de plantillas Python a través del cual puede generar archivos de configuración, páginas web, etc. También puede utilizar variables de hechos, bucles y condiciones de Ansible en sus plantillas de Jinja2.

Este artículo le mostrará cómo utilizar Ansible plantilla módulo y algunos conceptos básicos del lenguaje de plantillas Jinja2. Entonces empecemos!

Prerrequisitos


Si desea probar los ejemplos de este artículo:

1) Debes tener Ansible instalado en tu computadora.

2) Debe tener al menos un host Ubuntu / Debian o un host CentOS / RHEL 8 configurado para la automatización de Ansible.

Hay muchos artículos sobre LinuxHint dedicados a la instalación de Ansible y la configuración de hosts para la automatización de Ansible. También puede consultarlos, si es necesario.

Configuración de un directorio de proyectos Ansible

Antes de continuar, es una buena idea crear una estructura de directorio de proyecto, solo para mantener las cosas un poco organizadas.

Para crear un directorio de proyecto plantilla-demo / y todos los subdirectorios necesarios (en su directorio de trabajo actual), ejecute el siguiente comando:

$ mkdir -pv template-demo / playbooks / templates

Una vez que se crea el directorio del proyecto, navegue hasta el directorio del proyecto, de la siguiente manera:

$ cd template-demo /

Crear un Hospedadores archivo de inventario, de la siguiente manera:

$ nano hosts

Luego, agregue su IP de host o nombre DNS (vm1.nodekite.com y vm2.nodekite.com) en el archivo de inventario.

Una vez que haya terminado con este paso, guarde el archivo presionando + X, seguido por Y y .

Cree un archivo de configuración de Ansible en el directorio del proyecto, de la siguiente manera:

$ nano ansible.cfg

Luego, escriba las siguientes líneas en el ansible.cfg expediente.

Una vez que haya terminado este paso, guarde el archivo presionando + X, seguido por Y y .

En este punto, el directorio del proyecto debería tener el siguiente aspecto:

$ árbol

Como puede ver, los hosts de Ansible también son accesibles. Entonces, podemos pasar a la siguiente sección de este artículo.

$ ansible all -u ansible -m ping

Conceptos básicos del módulo de plantilla de Ansible

La plantilla módulo de Ansible acepta las mismas opciones que el Copiar módulo de Ansible.

Ansible común plantilla opciones de módulo:

src - La ruta del archivo de plantilla Jinja2 en su computadora, que será analizado por el lenguaje de plantillas Jinja2 y copiado a los hosts remotos.
dest - La ruta de destino en los hosts remotos a los que se copiará el archivo.
dueño - El propietario del archivo en los hosts remotos.
grupo - El grupo del archivo en los hosts remotos.
modo - El modo de permiso de archivo en los hosts remotos.

Veamos un ejemplo.

Primero, cree un nuevo libro de jugadas de Ansible copy_file_template1.yaml en el libros de jugadas / directorio, de la siguiente manera:

$ nano playbooks / copy_file_template1.yaml

Luego, escriba las siguientes líneas en el copy_file_template1.yaml libro de jugadas.

- hosts: todos
usuario: ansible
Tareas:
- nombre: Copiar índice.archivo html al servidor
plantilla:
src: índice.jinja2
dest: / home / ansible / index.html
propietario: ansible
grupo: ansible
modo: 0644

Este libro de jugadas copiará el índice.jinja2 archivo de la libros de jugadas / plantillas / directorio (relativo al directorio de su proyecto) a los hosts remotos que usan Ansible plantilla módulo.

Una vez que haya terminado con este paso, guarde el archivo presionando + X, seguido por Y y .

Crea el índice.jinja2 archivo de plantilla en el libros de jugadas / plantillas directorio, de la siguiente manera:

$ nano libros de jugadas / plantillas / índice.jinja2

Escriba las siguientes líneas en el índice.jinja2 archivo de plantilla:




Demostración de la plantilla Jinja2


Bienvenido a Linuxhint!



Este es solo un archivo HTML simple. No utilicé ninguna sintaxis elegante de Jinja2 aquí.

Una vez que haya terminado con este paso, guarde el archivo presionando + X, seguido por Y y .

Ejecuta el libro de jugadas copy_file_template1.yaml como sigue:

$ ansible-playbook playbooks / copy_file_template1.yaml

El libro de jugadas debería ejecutarse correctamente.

Como puede ver, el índice.jinja2 La plantilla se renderizó utilizando el lenguaje de plantillas Jinja2. El contenido renderizado debe copiarse a la índice.html archivo de los hosts remotos.

Impresión de variables en la plantilla Jinja2

Puede utilizar hechos, variables y variables definidas por el usuario de Ansible en sus plantillas de Jinja2.

En su plantilla Jinja2, puede imprimir el valor de una variable usando el nombre de la variable sintaxis. Si la variable es un objeto, puede imprimir propiedades de objetos individuales usando el objectVariable.nombre de la propiedad sintaxis.

En el ejemplo que sigue, imprimiremos el fecha propiedad de la ansible_date_time objeto en nuestro índice.jinja2 plantilla.

$ ansible all -u ansible -m configuración | egrep --color 'fecha | hora'

Primero, abra el índice.jinja2 archivo de plantilla con el editor de texto nano, de la siguiente manera:

$ nano libros de jugadas / plantillas / índice.jinja2

Agregue la siguiente línea al índice.jinja2 archivo de plantilla:

Página generada el ansible_date_time.fecha

El final índice.jinja2 el archivo debe verse como se muestra en la captura de pantalla a continuación.

Una vez que haya terminado con este paso, guarde el archivo presionando + X, seguido por Y y .

Ejecuta el libro de jugadas copy_file_template1.yaml como sigue:

$ ansible-playbook playbooks / copy_file_template1.yaml

Como puede ver, el índice.jinja2 La plantilla fue procesada por el lenguaje de plantillas Jinja2 y reemplazó la ansible_date_time.fecha variable con la fecha en AAAA-MM-DD formato. A continuación, la salida se copió en el índice.html archivo en el host remoto.

Declaración if condicional en la plantilla Jinja2

El lenguaje de plantillas Jinja2 admite condicional Si declaraciones. Puede verificar ciertas variables antes de imprimir cualquier cosa usando el Si declaración.

El Jinja2 Si la sintaxis es la siguiente:

% if condition%
Haz algo si la condición es verdadera
% terminara si %

Veamos un ejemplo del Jinja2 Si declaración.

En esta sección, demostraré el Jinja2 Si declaración usando el ansible_distribution variable de hechos.

$ ansible all -u ansible -m configuración | egrep --color 'dist'

Primero, abra el índice.jinja2 Plantilla Jinja2 con el editor de texto nano, de la siguiente manera:

$ nano libros de jugadas / plantillas / índice.jinja2

A continuación, agregue las siguientes líneas en el índice.jinja2 archivo de plantilla:

% if ansible_distribution == "Debian"%

Estás ejecutando Debian Linux


% terminara si %

Aquí, he comprobado si ansible_distribution es Debian. Si es así, imprima la cadena

Estás ejecutando Debian Linux

. De lo contrario, no lo imprima.

Finalmente, el índice.jinja2 El archivo de plantilla debe verse como se muestra en la captura de pantalla a continuación.

Una vez que haya editado el archivo, guárdelo presionando + X, seguido por Y y .

Ahora, ejecuta el libro de jugadas copy_file_template1.yaml como sigue:

$ ansible-playbook playbooks / copy_file_template1.yaml

Como puede ver, en mi host remoto Debian, el índice.html el archivo tiene la línea

Estás ejecutando Debian Linux

. Sin embargo, en mi host remoto CentOS, la línea no está presente. Entonces, el Jinja2 Si la condición está funcionando.

Condicional: declaración if-else en la plantilla Jinja2

El lenguaje de plantillas Jinja2 admite condicional si-si no declaraciones. Puede imprimir una cosa si la condición coincide e imprimir otra cosa si no utiliza el si-si no declaración.

El Jinja2 si-si no la sintaxis es la siguiente:

% if condition%
Haz algo si la condición es verdadera
% demás %
Haz algo si la condición es falsa
% terminara si %

Veamos un ejemplo del Jinja2 si-si no declaración.

Primero, abra el índice.jinja2 Plantilla Jinja2 con el editor de texto nano, de la siguiente manera:

$ nano libros de jugadas / plantillas / índice.jinja2

A continuación, agregue las siguientes líneas en el índice.jinja2 archivo de plantilla:

% if ansible_distribution == "Debian"%

Estás ejecutando Debian Linux


% demás %

No está ejecutando Debian Linux


% terminara si %

Aquí, he comprobado si ansible_distribution es Debian. Si es así, imprima la cadena

Estás ejecutando Debian Linux

. De lo contrario, imprima

No está ejecutando Debian Linux

.

Finalmente, el índice.jinja2 El archivo de plantilla debe verse como se muestra en la captura de pantalla a continuación.

Una vez que haya editado el archivo, guárdelo presionando + X, seguido por Y y .

Ejecuta el libro de jugadas copy_file_template1.yaml como sigue:

$ ansible-playbook playbooks / copy_file_template1.yaml

Como puede ver, en mi host remoto Debian, el índice.html el archivo tiene la línea

Estás ejecutando Debian Linux

. Pero en mi host remoto CentOS, el índice.html el archivo tiene la línea

No está ejecutando Debian Linux

. Entonces, el Jinja2 si-si no la condición está funcionando.

Condicional: declaración if-elif en la plantilla Jinja2

El lenguaje de plantillas Jinja2 admite condicional if-elif declaraciones.

El Jinja2 if-elif la sintaxis es la siguiente:

% if condition1%
Haz algo si la condición 1 es verdadera
% elif condition2%
Haz algo si la condición2 es verdadera
% elif condition3%
Haz algo si la condición3 es verdadera
..
% elif conditionN%
Haz algo si la condición N es verdadera
% demás %
Haz algo si ninguna de las condiciones es verdadera
% terminara si %

Aquí el % demás % La sección es opcional, pero está ahí si la necesita.

Veamos un ejemplo del Jinja2 if-elif declaración.

Primero, abra el índice.jinja2 Plantilla Jinja2 con el editor de texto nano, de la siguiente manera:

$ nano libros de jugadas / plantillas / índice.jinja2

A continuación, agregue las siguientes líneas en el índice.jinja2 archivo de plantilla:

% if ansible_distribution == "Debian"%

Estás ejecutando Debian Linux


% elif ansible_distribution == "CentOS"%

Estás ejecutando CentOS Linux


% demás %

Su sistema operativo no es compatible


% terminara si %

Aquí, he comprobado si ansible_distribution es Debian. Si es así, imprima la cadena

Estás ejecutando Debian Linux

.

También he comprobado si ansible_distribution es CentOS. Si es así, imprima la cadena

Estás ejecutando CentOS Linux

.

De lo contrario, imprima

Su sistema operativo no es compatible

.

Finalmente, el índice.jinja2 El archivo de plantilla debe verse como se muestra en la captura de pantalla a continuación.

Una vez que haya editado el archivo, guárdelo presionando + X, seguido por Y y .

Ejecuta el libro de jugadas copy_file_template1.yaml como sigue:

$ ansible-playbook playbooks / copy_file_template1.yaml

Como puede ver, en mi host remoto Debian, el índice.html el archivo tiene la línea

Estás ejecutando Debian Linux

.

En mi host remoto CentOS, el índice.html el archivo tiene la línea

Estás ejecutando CentOS Linux

.

Si tuviera otro host remoto que ejecute un sistema operativo que no sea Debian o CentOS, tendría la línea

Su sistema operativo no es compatible

en el índice.html expediente.

Entonces, el Jinja2 if-elif la condición está funcionando.

Bucles en la plantilla Jinja2

También puede imprimir matrices y objetos usando bucles en Jinja2.
El Jinja2 por La sintaxis del bucle es la siguiente:

% para variableName en arrayName%
Hacer algo con variableName
% endfor%

Aquí, en cada iteración de la matriz arrayName, uno de los elementos de la matriz (comenzando desde el principio de la matriz) se asigna a la nombre de la variable variable. Puedes hacer algo con esta variable dentro del ciclo.

Veamos cómo puede imprimir elementos de matriz en su plantilla Jinja2 en el siguiente ejemplo.

Primero, abra el copy_file_template1.yaml Libro de jugadas de Ansible con el editor de texto nano, de la siguiente manera:

$ nano playbooks / copy_file_template1.yaml

A continuación, agregue las siguientes líneas en el copy_file_template1.yaml archivo de libro de jugadas:

vars:
menús:
- Casa
- Productos
- Sobre nosotros
- Contáctenos

Aquí, he agregado un menús matriz en el copy_file_template1.yaml libro de jugadas. A continuación, imprimiré los elementos de la matriz usando un bucle en mi índice.jinja2 Archivo de plantilla Jinja2.

Finalmente, el copy_file_template1.yaml El archivo del libro de jugadas debe verse como se muestra en la captura de pantalla a continuación.

Una vez que haya editado el archivo, guárdelo presionando + X, seguido por Y y .

Ahora, abre el índice.jinja2 Plantilla Jinja2 con el editor de texto nano, de la siguiente manera:

$ nano libros de jugadas / plantillas / índice.jinja2

Agregue las siguientes líneas en el índice.jinja2 archivo de plantilla:

Aquí, estoy generando una barra de navegación HTML simple usando un Jinja2 por círculo. El bucle itera a través del menús array (que he definido en copy_file_template1.yaml playbook) y genera un menú artículo en cada iteración.

Finalmente, el índice.jinja2 El archivo de plantilla debe verse como se muestra en la captura de pantalla a continuación.

Una vez que haya editado el archivo, guárdelo presionando + X, seguido por Y y .

Ejecuta el libro de jugadas copy_file_template1.yaml como sigue:

$ ansible-playbook playbooks / copy_file_template1.yaml

Como puede ver, el Jinja2 por bucle generó una barra de navegación HTML (en el índice.html expediente).

También puede acceder a una variedad de objetos en su plantilla Jinja2.

Veamos otro ejemplo.

Primero, abra el copy_file_template1.yaml Libro de jugadas de Ansible con el editor de texto nano, de la siguiente manera:

$ nano playbooks / copy_file_template1.yaml

A continuación, agregue las siguientes líneas en el copy_file_template1.yaml archivo de libro de jugadas:

vars:
menús:
- nombre: Casa
enlace: / inicio
- nombre: Productos
enlace: / productos
- nombre: Sobre nosotros
enlace: / sobre-nosotros
- nombre: Contáctenos
enlace: / contáctenos

Aquí, he agregado un menús matriz de objetos en el copy_file_template1.yaml libro de jugadas. Cada uno de estos objetos tiene dos propiedades, una nombre propiedad y una Enlace propiedad.

Finalmente, el copy_file_template1.yaml El archivo del libro de jugadas debe verse como se muestra en la captura de pantalla a continuación.

Una vez que haya editado el archivo, guárdelo presionando + X, seguido por Y y .

Abre el índice.jinja2 Plantilla Jinja2 con el editor de texto nano, de la siguiente manera:

$ nano libros de jugadas / plantillas / índice.jinja2

A continuación, agregue las siguientes líneas en el índice.jinja2 archivo de plantilla:

Todo lo que ves aquí es igual que en el ejemplo anterior. La única diferencia es que estoy imprimiendo las propiedades del objeto nombre (utilizando menú.nombre) y Enlace (utilizando menú.Enlace) en mi índice.jinja2 Plantilla Jinja2.

Finalmente, el índice.jinja2 El archivo de plantilla debe verse como se muestra en la captura de pantalla a continuación.

Una vez que haya editado el archivo, guárdelo presionando + X, seguido por Y y .

Ahora, ejecuta el libro de jugadas copy_file_template1.yaml como sigue:

$ ansible-playbook playbooks / copy_file_template1.yaml

Como puede ver, el Jinja2 por bucle generó una barra de navegación HTML (en el índice.html archivo) de una matriz de objetos.

Que sigue?

En este artículo, le he mostrado cómo usar Ansible plantilla módulo y describió algunos de los conceptos básicos del lenguaje de plantillas Jinja2. Visite el sitio web oficial de Jinja2 para obtener más información sobre el lenguaje de plantillas Jinja2.

Cómo cambiar los botones izquierdo y derecho del mouse en una PC con Windows 10
Es una norma que todos los dispositivos de mouse de computadora estén diseñados ergonómicamente para usuarios diestros. Pero hay dispositivos de mouse...
Emule los clics del mouse colocando el mouse con Clickless Mouse en Windows 10
El uso excesivo de un mouse o teclado en una postura incorrecta puede provocar muchos problemas de salud, como tensión, síndrome del túnel carpiano y ...
Agregue gestos del mouse a Windows 10 con estas herramientas gratuitas
En los últimos años, las computadoras y los sistemas operativos han evolucionado enormemente. Hubo un momento en que los usuarios tenían que usar coma...