Cómo usar inventarios estáticos y dinámicos en Ansible – Parte 4

En esta Parte 4 de la serie Ansible, explicaremos cómo usar el inventario estático y dinámico para definir grupos de hosts en Ansible.

En un Ansible, los hosts o servidores administrados que son controlados por el nodo de control de Ansible se definen en un archivo de inventario de hosts como se explica en. Un archivo de inventario de hosts es un archivo de texto que consiste en nombres de host o direcciones IP de hosts administrados o servidores remotos.

Los hosts administrados pueden ser listados como entradas individuales o categorizados bajo un nombre de grupo como veremos más adelante. En Ansible, hay dos tipos de archivos de inventario: Estático y Dinámico.

Vamos a echar un vistazo a cada uno de ellos y a ver cómo podemos gestionarlos. Por ahora, asumimos que ya ha instalado Ansible en su nodo de control, y configurado la conexión SSH sin contraseña a sus hosts gestionados.

Archivo de inventario de hosts estáticos

En Ansible, un archivo de inventario estático es un archivo de texto plano que contiene una lista de hosts gestionados declarados bajo un grupo de hosts utilizando nombres de host o direcciones IP.

Un nombre de grupo de hosts está encerrado entre corchetes, es decir . Las entradas de hosts gestionados se enumeran posteriormente debajo del nombre del grupo, cada una en su propia línea. Como se discutió anteriormente, los hosts se enumeran utilizando nombres de host o direcciones IP.

Host A ip_address Host B ip_addressHost c ip_address

Para fines de ilustración, vamos a crear un archivo de inventario estático.

# mkdir test_lab && cd test_lab# vim hosts
Archivo de inventario estático
173.82.115.165173.82.220.239webserversdatabase_servers

Guardar el archivo y salir.

Como se puede ver en el archivo de inventario anterior, hemos creado 2 grupos de host: webservers y database_servers. Además, hemos creado un grupo adicional llamado datacenter que incluye un grupo de grupos de hosts denotados por el sufijo ': children' como se ve arriba.

Ansible también permite colocar grupos de hosts bajo un nombre de grupo. En el archivo de inventario anterior, los grupos webservers y database_servers se han colocado bajo el centro de datos.

NOTA: No es obligatorio colocar los hosts administrados en un grupo de hosts. Puedes simplemente listarlos usando sus nombres de host o direcciones IP por ejemplo.

173.82.202.239172.82.115.165load_balancer.pnl.com

Ahora vamos a usar unos cuantos comandos de Ansible para referenciar el archivo de inventario de hosts. La sintaxis básica para la gestión del inventario es la que se muestra.

$ ansible {host-pattern} -i /path/of/inventory/file --list-hosts

Por ejemplo,

$ ansible all -i /root/test_labs/hosts --list-hosts
Lista de hosts Ansible

Alternativamente, puede utilizar el carácter comodín * para reemplazar el argumento 'all'.

$ ansible * -i /root/test_labs/hosts --list-hosts
Lista de hosts Ansible usando comodines

Para listar hosts en un grupo, especifique el grupo de hosts en el lugar de host-patrón.

$ ansible webservers -i /root/test_labs/hosts --list-hosts
Lista de hosts de Ansible en el grupo

Archivo de inventario de hosts dinámico

En una configuración – especialmente en una configuración en la nube como AWS, donde el archivo de inventario cambia constantemente a medida que se añaden o retiran servidores, mantener las pestañas de los hosts definidos en el archivo de inventario se convierte en un verdadero desafío. Se convierte en un inconveniente volver al archivo de host y actualizar la lista de hosts con sus direcciones IP.

Y aquí es donde un inventario dinámico entra en juego. ¿Qué es un inventario dinámico? Un inventario dinámico es un script escrito en Python, PHP o cualquier otro lenguaje de programación. Viene muy bien en entornos de nube como AWS donde las direcciones IP cambian una vez que un servidor virtual se detiene y se inicia de nuevo.

Ansible ya ha desarrollado scripts de inventario para plataformas de nube pública como Google Compute Engine, Amazon EC2 instance, OpenStack, RackSpace, cobbler, entre otros.

¿Cuáles son las ventajas de un inventario dinámico sobre un inventario estático?
  • Los inventarios dinámicos hacen un trabajo perfecto para reducir el error humano, ya que la información se recoge utilizando scripts.
  • Se requiere un esfuerzo mínimo en la gestión de inventarios.

Puedes escribir tu propio inventario dinámico personalizado en un lenguaje de programación de tu elección. El inventario debe devolver un formato en JSON cuando se pasan las opciones apropiadas.

Utilizar un script de inventario dinámico existente

Un script que se utiliza para crear un inventario dinámico tiene que hacerse ejecutable para que Ansible pueda utilizarlo.

Para recuperar la información sobre los hosts dentro de un script de inventario dinámico simplemente se ejecuta.

# ./script --list 

Como se señaló anteriormente, la salida debe estar en JSON en el formato siguiente.

Un diccionario compuesto por grupos (i.e webservers, database_Servers)
  • Una lista de hosts gestionados por grupo
  • Un diccionario de variables
Diccionario meta
  • Hosts y hostvars
Muestra de salida
Conclusión

En este artículo, hemos demostrado cómo crear inventarios tanto estáticos como dinámicos. En resumen, un archivo de inventario estático es un archivo de texto plano que contiene una lista de hosts gestionados o nodos remotos cuyos números y direcciones IP permanecen bastante constantes.

Por otro lado, un archivo de hosts dinámico va cambiando a medida que se añaden nuevos hosts o se dan de baja los antiguos. Las direcciones IP de los hosts también son dinámicas a medida que se detienen y se inician nuevos sistemas de host. Esperamos que haya encontrado este tutorial informativo.