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. 🚀