Inventario de grupos de Ansible

AnsibleAnsibleBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ansible(("Ansible")) -.-> ansible/AnsibleSetupandConfigurationGroup(["Ansible Setup and Configuration"]) ansible(("Ansible")) -.-> ansible/ModuleOperationsGroup(["Module Operations"]) ansible(("Ansible")) -.-> ansible/InventoryManagementGroup(["Inventory Management"]) linux(("Linux")) -.-> linux/RemoteAccessandNetworkingGroup(["Remote Access and Networking"]) linux(("Linux")) -.-> linux/VersionControlandTextEditorsGroup(["Version Control and Text Editors"]) ansible/AnsibleSetupandConfigurationGroup -.-> ansible/install("Ansible Setup") ansible/ModuleOperationsGroup -.-> ansible/ping("Network Test") ansible/InventoryManagementGroup -.-> ansible/groups_inventory("Define Inventory Groups") linux/RemoteAccessandNetworkingGroup -.-> linux/ssh("Secure Connecting") linux/VersionControlandTextEditorsGroup -.-> linux/vim("Text Editing") linux/VersionControlandTextEditorsGroup -.-> linux/nano("Simple Text Editing") subgraph Lab Skills ansible/install -.-> lab-290160{{"Inventario de grupos de Ansible"}} ansible/ping -.-> lab-290160{{"Inventario de grupos de Ansible"}} ansible/groups_inventory -.-> lab-290160{{"Inventario de grupos de Ansible"}} linux/ssh -.-> lab-290160{{"Inventario de grupos de Ansible"}} linux/vim -.-> lab-290160{{"Inventario de grupos de Ansible"}} linux/nano -.-> lab-290160{{"Inventario de grupos de Ansible"}} end

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 localhost como 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ódulo ping.
  • 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 webservers también está implícitamente en el grupo production.
  • Puedes aplicar configuraciones a todos los hosts de producción apuntando al grupo production.
  • Todavía puedes apuntar solo al grupo webservers si 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 debug para 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.