Introducción
En este laboratorio, aprenderás cómo crear y configurar archivos de inventario de Ansible. Ansible utiliza archivos de inventario para definir y organizar los hosts que gestiona. Explorarás la estructura básica de un archivo de inventario, crearás grupos, establecerás jerarquías de grupos y asignarás variables a los grupos. Estas habilidades son esenciales para gestionar eficazmente tu infraestructura con Ansible.
Creación de un inventario básico
El entorno del laboratorio se ha configurado previamente con acceso SSH a la máquina local. Puedes utilizar
localhostcomo el host de destino para todas las operaciones de Ansible en este laboratorio.
Un archivo de inventario de Ansible define los hosts y grupos de hosts en los que operan los comandos, módulos y tareas de un playbook. Vamos a crear un archivo de inventario básico.
Crea un nuevo archivo llamado inventory en el directorio /home/labex/project:
nano /home/labex/project/inventory
Agrega el siguiente contenido al archivo:
localhost ansible_connection=local
Analicemos esto:
localhost: Este es el nombre del host. En este caso, es la máquina local.ansible_connection=local: Esta es una variable de Ansible que le indica a Ansible que se conecte a este host localmente, en lugar de a través de SSH. Esto es útil para gestionar la máquina local.
Guarda el archivo y sal del editor (en nano, presiona Ctrl+X, luego Y, luego Enter).
Ahora, vamos a probar nuestro inventario utilizando el módulo ping de Ansible. El módulo ping en realidad no utiliza el protocolo ICMP ping; en cambio, verifica que Ansible pueda conectarse al host y ejecutar código Python.
Ejecuta este comando:
ansible -i inventory -m ping all
Analicemos este comando:
-i inventory: Especifica el archivo de inventario a utilizar.-m ping: Indica a Ansible que utilice el móduloping.all: Apunta a todos los hosts del inventario.
Deberías ver una salida que indique una conexión exitosa:
localhost | SUCCESS => {
"changed": false,
"ping": "pong"
}
Si ves esta salida, significa que Ansible se conectó correctamente al localhost y ejecutó el módulo ping.
Agrupación de hosts
Ansible te permite organizar los hosts en grupos. Esto es útil para aplicar configuraciones o ejecutar tareas en múltiples hosts simultáneamente. Vamos a modificar nuestro inventario para incluir un grupo.
Edita el archivo inventory:
nano /home/labex/project/inventory
Actualiza el contenido a:
[webservers]
localhost ansible_connection=local
Esto define un grupo llamado webservers que incluye nuestro localhost. En Ansible, los grupos se definen poniendo el nombre del grupo entre corchetes cuadrados []. Cualquier host enumerado bajo un grupo pertenece a ese grupo.
Guarda y sal del editor.
Ahora, vamos a probar nuestro grupo utilizando el módulo ping:
ansible -i inventory -m ping webservers
Este comando es similar al anterior, pero en lugar de all, estamos apuntando al grupo webservers.
Deberías ver la misma salida de éxito que antes, pero ahora estamos apuntando explícitamente al grupo webservers. Esto puede parecer innecesario con solo un host, pero a medida que tu inventario crece, la agrupación se vuelve cada vez más útil para apuntar a conjuntos específicos de hosts.
Creación de jerarquías de grupos
Ansible admite grupos anidados, lo que te permite crear jerarquías. Esto es útil para organizar los hosts según sus roles o entornos. Vamos a agregar otro grupo y crear una jerarquía.
Edita el archivo inventory:
nano /home/labex/project/inventory
Actualiza el contenido a:
[webservers]
localhost ansible_connection=local
[production:children]
webservers
Esto crea un nuevo grupo llamado production que incluye todos los hosts del grupo webservers. El sufijo :children le indica a Ansible que este grupo es un grupo de grupos, no un grupo de hosts.
Esto es lo que significa esta jerarquía:
- Cualquier host del grupo
webserverstambién está implícitamente en el grupoproduction. - Puedes aplicar configuraciones a todos los hosts de producción apuntando al grupo
production. - Todavía puedes apuntar solo al grupo
webserverssi es necesario.
Guarda y sal del editor.
Prueba la nueva jerarquía de grupos:
ansible -i inventory -m ping production
Este comando debe hacer un ping a todos los hosts del grupo production, que incluye todos los hosts del grupo webservers. En nuestro caso, sigue siendo solo el localhost, pero en un escenario del mundo real, esta estructura permite una gestión de hosts potente y flexible.
Asignación de variables a grupos
Ansible te permite asignar variables a grupos en el archivo de inventario. Estas variables se pueden utilizar en playbooks y plantillas, lo que hace que tu código de Ansible sea más flexible y reutilizable.
Edita el archivo inventory:
nano /home/labex/project/inventory
Actualiza el contenido a:
[webservers]
localhost ansible_connection=local
[production:children]
webservers
[webservers:vars]
http_port=80
Esto asigna la variable http_port con un valor de 80 a todos los hosts del grupo webservers. El sufijo :vars se utiliza para definir variables para un grupo.
Guarda y sal del editor.
Ahora, vamos a crear un playbook simple para mostrar esta variable. Un playbook es un archivo YAML que define un conjunto de tareas a ejecutar en hosts. Crea un nuevo archivo llamado show_http_port.yml:
nano /home/labex/project/show_http_port.yml
Agrega el siguiente contenido:
---
- name: Show HTTP Port
hosts: webservers
tasks:
- name: Display HTTP Port
debug:
msg: "The HTTP port is {{ http_port }}"
Este playbook:
- Apunta al grupo
webservers - Tiene una única tarea que utiliza el módulo
debugpara mostrar un mensaje - Utiliza la sintaxis
{{ http_port }}para hacer referencia a la variable que definimos en el inventario
Guarda y sal del editor.
Ejecuta el playbook:
ansible-playbook -i inventory show_http_port.yml
Deberías ver una salida que muestra el valor del puerto HTTP:
PLAY [Show HTTP Port] ********************************************************
TASK [Gathering Facts] ********************************************************
ok: [localhost]
TASK [Display HTTP Port] ******************************************************
ok: [localhost] => {
"msg": "The HTTP port is 80"
}
PLAY RECAP ********************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Esto demuestra que la variable que definimos en el inventario es accesible en nuestro playbook.
Resumen
En este laboratorio, has aprendido los fundamentos de la gestión de inventarios de Ansible. Has creado un archivo de inventario básico y has aprendido cómo utilizar el módulo ping de Ansible para verificar la conectividad. Has explorado cómo agrupar hosts y crear jerarquías de grupos, que son esenciales para organizar y gestionar infraestructuras más grandes. Finalmente, has aprendido cómo asignar variables a grupos y utilizarlas en un playbook simple.
Estas habilidades forman la base para trabajar con Ansible y serán inestimables a medida que te adentres en tareas de automatización más complejas. Recuerda que una gestión efectiva del inventario es clave para proyectos de Ansible escalables y mantenibles. A medida que continúes tu viaje con Ansible, considera explorar características de inventario más avanzadas, como inventarios dinámicos y plugins de inventario.
La práctica es clave para dominar estos conceptos. Intenta crear inventarios más complejos, experimenta con diferentes estructuras de grupos y utiliza variables en playbooks más avanzados. Cuanto más trabajes con Ansible, más cómodo te sentirás con sus poderosas capacidades de automatización.


