Gestión de Inventarios en Ansible

En Ansible, el inventario es una de las piezas clave, ya que define los servidores sobre los cuales se ejecutarán los playbooks. Un inventario puede ser un simple archivo estático en formato INI o YAML, o bien puede generarse dinámicamente desde una fuente externa como AWS, Kubernetes o una base de datos.

En este post, aprenderemos cómo gestionar inventarios en Ansible, incluyendo su estructura, formato y ejemplos prácticos.


1. ¿Qué es un Inventario en Ansible?

Un inventario es una lista de hosts y grupos de hosts, donde podemos definir parámetros como direcciones IP, nombres de usuario, contraseñas y variables específicas.

Por defecto, Ansible usa el archivo /etc/ansible/hosts como inventario, pero podemos definir nuestros propios archivos de inventario y usarlos al ejecutar los playbooks.

2. Formatos de Inventario en Ansible

Inventario en Formato INI

El formato más común para los inventarios es INI. Un inventario básico puede verse así:

# Inventario en formato INI
[webservers]
192.168.1.10
192.168.1.11

[dbservers]
db1.example.com
db2.example.com

[all:vars]
ansible_user=ubuntu
ansible_ssh_private_key_file=~/.ssh/id_rsa
  • [webservers] y [dbservers] son grupos de servidores.
  • all:vars define variables globales que aplican a todos los hosts.

Inventario en Formato YAML

También podemos usar el formato YAML, que es más estructurado:

all:
  hosts:
    web1:
      ansible_host: 192.168.1.10
    web2:
      ansible_host: 192.168.1.11
  children:
    webservers:
      hosts:
        web1:
        web2:
    dbservers:
      hosts:
        db1:
          ansible_host: db1.example.com
        db2:
          ansible_host: db2.example.com
  vars:
    ansible_user: ubuntu
    ansible_ssh_private_key_file: ~/.ssh/id_rsa

3. Ejecutar Comandos en un Inventario

Podemos comprobar la conectividad de los servidores del inventario con el módulo ping:

ansible all -i inventario.ini -m ping

Para ejecutar un comando en un grupo específico:

ansible webservers -i inventario.ini -m command -a "uptime"

4. Variables de Inventario en Ansible

Cada host o grupo puede tener variables específicas. En el formato INI, podemos asignar variables así:

[webservers]
192.168.1.10 ansible_user=ubuntu ansible_port=22
192.168.1.11 ansible_user=root ansible_port=2222

En YAML, se haría de esta forma:

webservers:
  hosts:
    web1:
      ansible_host: 192.168.1.10
      ansible_user: ubuntu
    web2:
      ansible_host: 192.168.1.11
      ansible_user: root
      ansible_port: 2222

5. Uso de Inventarios Dinámicos

En entornos en la nube, los servidores pueden cambiar constantemente. En estos casos, Ansible permite usar inventarios dinámicos, integrados con proveedores como AWS, Azure y Kubernetes.

Ejemplo de inventario dinámico con AWS EC2:

ansible-inventory -i aws_ec2.yml --list

Para usar un inventario dinámico en un playbook:

ansible-playbook -i aws_ec2.yml playbook.yml

El inventario es la base de Ansible y nos permite organizar nuestros servidores de manera eficiente. Podemos usar archivos estáticos en INI o YAML, o bien aprovechar inventarios dinámicos en entornos cloud.

En el próximo post, hablaremos sobre Ansible Galaxy y la gestión de roles de terceros, para reutilizar código de manera eficiente. 🚀