Cómo crear plantillas en Ansible para crear configuraciones en nodos administrados - Parte 7

Cómo crear plantillas en Ansible para crear configuraciones en nodos administrados - Parte 7

En esto Parte 7 De la serie Ansible, aprenderá cómo crear y usar plantillas en Ansible para crear configuraciones personalizadas en nodos administrados. La plantilla en Ansible es una forma fácil y amigable de impulsar las configuraciones personalizadas a nodos administrados que ejecutan diferentes sistemas con una edición mínima de archivos de libros de jugadas.

¿Qué se plantilla en Ansible??

Para tener una mejor idea de qué es una plantilla, consideremos un gerente de TI que redacta un correo electrónico para invitar a su departamento a un cóctel. El correo electrónico se envía a cada uno de los miembros y también los invita a etiquetar junto con sus cónyuges.

El correo electrónico ha sido personalizado de modo que el cuerpo del correo electrónico sigue siendo el mismo, pero los destinatarios y los nombres de sus respectivos cónyuges varían. El correo electrónico se convierte en el plantilla, mientras que los destinatarios y los respectivos cónyuges son variables.

Ese fue un ejemplo genérico. Usos ansibles Jinja2 que es un motor de plantilla moderno para los marcos de Python utilizados para generar contenido dinámico o expresiones. La plantilla es extremadamente útil al crear archivos de configuración personalizados para múltiples servidores, pero únicos para cada uno de ellos.

Jinja2 Utiliza los aparatos ortopédicos dobles encerrar una variable que se ha definido. Para comentarios, use # # y para declaraciones condicionales uso %... %.

Supongamos que tiene un modelo de datos de VLAN en su red con sistemas de host que desea impulsar a sus respectivos VLAN como se muestra.

VLAN: - ID: 10 Nombre: LB - ID: 20 Nombre: WB_01 - ID: 30 Nombre: WB_02 - ID: 40 Nombre: DB 

Para representar esta configuración, la correspondiente jinja2 plantilla llamada VLAN.J2 aparecería como se muestra. Como puede ver, las variables VLAN.identificación y VLAN.nombre han sido encerrados en aparatos ortopédicos.

VLAN VLAN.id nombre VLAN.nombre  

Poniendo todo en un libro de jugadas que coloca diferentes máquinas anfitrionas, esto aparecería como se muestra:

 - Tareas de hosts: - Nombre: Renderización de la plantilla de configuración de VLAN: SRC: VLAN.J2 Dest: "VLAN_CONFIGS/Inventory_HostName.conf " 

Ejemplo 1: Configuración de servidores web en diferentes distribuciones

En este ejemplo, crearemos índice.html archivos que mostrarán información sobre el nombre de host y el sistema operativo de 2 servidores web que se ejecuta Centos y Ubuntu.

Configuración

Ubuntu 18 - Dirección IP: 173.82.202.239 CentOS 7 - Dirección IP: 173.82.115.165 

Apache Webserver ya se ha instalado en ambos servidores.

Para Centos 7

Página web de Apache en Centos 7

Para ubuntu 18.04

Página web de Apache en Ubuntu 18.04

Así que creemos un libro de jugadas test_server.YML como se muestra:

--- - Hosts: Todos se convierten en: Sí Tareas: - Nombre: Instalar Índice.Plantilla HTML: SRC: índice.html.J2 Dest:/var/www/html/índice.Modo HTML: 0777 

Nuestro Jinja La plantilla de archivo es índice.html.J2 que será empujado al índice.html Archivo en cada servidor web. Recuerda siempre poner la extensión .J2 al final para indicar que es un archivo Jinja2.

Ahora creemos el archivo de plantilla índice.html.J2.

  

El nombre de host de este servidor web es ansible_hostname

Se está ejecutando en el sistema ansible_os_family

Esta plantilla es un archivo HTML básico donde el ansible_hostname y ansible_os_family son variables integradas que se sustituirán con los respectivos nombres de host y los sistemas operativos de los servidores web individuales en el navegador.

Ahora, ejecutemos el libro de jugadas.

# Ansible-Playbook test_server.YML 
Crear archivo de plantilla ansible

Ahora recargemos las páginas web para ambos Centos 7 y Ubuntu servidores web.

Para Centos 7

Verificar la página web de Apache en Centos 7

Para ubuntu 18.04

Verificar la página web de Apache en Ubuntu 18.04

Como puede ver, se ha mostrado información diferente sobre el nombre de host y la familia del sistema operativo en cada servidor. Y así es como genial Jinja2 La plantilla es!

Filtros:

A veces, puede decidir sustituir el valor de una variable con una cadena que aparece de cierta manera.

Ejemplo 1: hacer que las cadenas aparezcan en mayúsculas/minúsculas

Por ejemplo, en el ejemplo anterior, podemos decidir hacer que las variables ansibles aparezcan en mayúsculas. Para hacerlo, agregue el valor superior a la variable. De esta manera, el valor en la variable se convierte en formato mayúscula.

ansible_hostname | superior => centos 7 ansible_os_family | superior => redhat 
Hacer una cadena en mayúsculas

Del mismo modo, puede convertir la salida de cadena en minúsculas agregando el argumento inferior.

ansible_hostname | inferior => centos 7 ansible_os_family | inferior => redhat 
Hacer una cuerda en minúsculas

Ejemplo 2: reemplace una cadena con otra

Además, puede reemplazar una cadena con otra.

Por ejemplo:

El título de la película es película_name => El título de la película es Anillo.

Para reemplazar la salida con otra cadena, use el argumento de reemplazo como se muestra:

El título de la película es Movie_Name | reemplazar ("anillo", "atraco") => El título de la película es Robo.

Ejemplo 3: Listas y establece filtros

Para recuperar el valor más pequeño en una matriz, use el mínimo filtrar.

[2, 3, 4, 5, 6, 7] | min => 2 

Del mismo modo, para recuperar el número más grande, use el máximo filtrar.

[2, 3, 4, 5, 6, 7] | max => 7 

Para mostrar valores únicos, use el único filtrar.

[2, 3, 3, 2, 6, 7] | único => 2, 3 

Utilizar el aleatorio Filtrar para obtener un número aleatorio entre 0 y el valor.

50 | aleatorio => algún número aleatorio 

Bucles:

Al igual que en los lenguajes de programación, tenemos bucles en ansible Jinja2.

Por ejemplo, para generar un archivo que contiene una lista de números use el en bucle Como se muestra en el siguiente ejemplo:

Ejemplo 1:

 % para el número en [0, 1, 2, 3, 4, 5, 6, 7] % número  % final para % 

También puede combinar el bucle for con if-else declaraciones para filtrar y obtener ciertos valores.

Ejemplo 2:

% para el número en [0, 1, 2, 3, 4, 5, 6, 7]% % if número == 5% número % endif% % endfor% 

Y eso es todo para esta conferencia. Únase a nosotros en el siguiente tema en el que nos aventuraremos a trabajar con variables y hechos de Ansible.