Introducción
Ansible es una herramienta de automatización de TI ampliamente utilizada que simplifica la gestión de la infraestructura y las aplicaciones. En este tutorial, exploraremos cómo establecer la ruta del archivo de inventario predeterminado en Ansible, asegurando una gestión de la infraestructura eficiente y consistente. Un archivo de inventario en Ansible contiene una lista de hosts que Ansible gestiona. Al configurar una ubicación de archivo de inventario personalizada, puede organizar mejor su flujo de trabajo de automatización.
Entendiendo el Inventario de Ansible
Antes de configurar una ruta de archivo de inventario personalizada, entendamos qué es un inventario de Ansible y cómo funciona por defecto.
¿Qué es un Inventario de Ansible?
Un inventario de Ansible es un archivo que contiene información sobre los hosts que Ansible gestionará. Por defecto, Ansible busca el archivo de inventario en /etc/ansible/hosts. El inventario puede estar en varios formatos, pero el más común es un archivo de estilo INI o un archivo YAML.
Comprobemos si Ansible está instalado correctamente en nuestro sistema:
ansible --version
Debería ver una salida similar a esta:
ansible [core 2.12.x]
config file = /etc/ansible/ansible.cfg
configured module search path = ['/home/labex/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3/dist-packages/ansible
executable location = /usr/bin/ansible
python version = 3.10.x (default, Ubuntu, etc.)
Ahora, veamos la ubicación predeterminada del archivo de inventario:
cat /etc/ansible/hosts
Este archivo podría estar vacío o contener configuraciones de host de ejemplo. El archivo de inventario predeterminado a menudo se ve así:
## Example inventory file
[webservers]
web1.example.com
web2.example.com
[dbservers]
db1.example.com
db2.example.com
En este formato:
[webservers]y[dbservers]son nombres de grupo- Los nombres de host o direcciones IP enumeradas bajo cada grupo pertenecen a ese grupo
Para nuestro laboratorio, crearemos nuestro propio archivo de inventario personalizado en una ubicación diferente.
Creación de un Archivo de Inventario Personalizado
Ahora que entendemos qué es un archivo de inventario, creemos nuestro propio archivo de inventario personalizado en nuestro directorio del proyecto.
Crear un Directorio para los Archivos de Ansible
Primero, naveguemos a nuestro directorio del proyecto y creemos una carpeta dedicada para nuestros archivos de Ansible:
cd ~/project
mkdir -p ansible/inventory
Crear un Archivo de Inventario Personalizado
Ahora, creemos un archivo de inventario simple en nuestro nuevo directorio:
cat > ansible/inventory/hosts.ini << 'EOF'
## Custom inventory file
[webservers]
web1.example.com
web2.example.com
[dbservers]
db1.example.com
db2.example.com
[local]
localhost ansible_connection=local
[all:vars]
ansible_user=ubuntu
EOF
Este archivo de inventario define tres grupos:
webservers: Contiene dos servidores webdbservers: Contiene dos servidores de base de datoslocal: Contiene localhost con una configuración de conexión especial
Comprobemos nuestro archivo de inventario recién creado:
cat ansible/inventory/hosts.ini
Debería ver el contenido que acabamos de crear.
Este archivo ahora está listo para ser utilizado como nuestro archivo de inventario personalizado. En el siguiente paso, configuraremos Ansible para que use este archivo por defecto en lugar del archivo /etc/ansible/hosts a nivel del sistema.
Estableciendo la Ruta del Archivo de Inventario Predeterminado
Ahora que hemos creado nuestro archivo de inventario personalizado, configuremos Ansible para que lo use como el archivo de inventario predeterminado. Hay varias formas de hacer esto, pero nos centraremos en los dos métodos más comunes.
Método 1: Usando un Archivo de Configuración de Ansible
Ansible busca archivos de configuración en el siguiente orden:
- Variable de entorno
ANSIBLE_CONFIG ansible.cfgen el directorio actual~/.ansible.cfg(directorio de inicio del usuario)/etc/ansible/ansible.cfg(a nivel del sistema)
Creemos un archivo ansible.cfg en nuestro directorio del proyecto:
cat > ~/project/ansible/ansible.cfg << 'EOF'
[defaults]
inventory = ~/project/ansible/inventory/hosts.ini
host_key_checking = False
EOF
En este archivo de configuración, hemos establecido:
inventory: La ruta a nuestro archivo de inventario personalizadohost_key_checking: Deshabilitado para evitar las indicaciones de verificación de la clave del host SSH
Método 2: Usando una Variable de Entorno
Otra forma de especificar el archivo de inventario es usando la variable de entorno ANSIBLE_INVENTORY. Esto es útil cuando desea usar temporalmente un archivo de inventario diferente sin cambiar la configuración:
export ANSIBLE_INVENTORY=~/project/ansible/inventory/hosts.ini
Confirmemos que nuestra configuración está funcionando ejecutando un comando simple de Ansible:
cd ~/project/ansible
ansible --list-hosts all
Este comando debería listar todos los hosts de nuestro archivo de inventario personalizado:
hosts (5):
web1.example.com
web2.example.com
db1.example.com
db2.example.com
localhost
Ahora Ansible usará nuestro archivo de inventario personalizado por defecto cuando ejecutemos comandos de Ansible desde el directorio ~/project/ansible.
Verificando la Configuración del Inventario
Ahora que hemos configurado nuestro archivo de inventario personalizado, verifiquemos que Ansible lo está utilizando correctamente y exploremos algunos comandos para trabajar con el inventario.
Comprobando el Inventario con ansible-inventory
El comando ansible-inventory nos permite ver y validar nuestra configuración del inventario:
cd ~/project/ansible
ansible-inventory --list
Esto mostrará el inventario en formato JSON:
{
"_meta": {
"hostvars": {
"localhost": {
"ansible_connection": "local"
}
}
},
"all": {
"children": ["dbservers", "local", "ungrouped", "webservers"]
},
"dbservers": {
"hosts": ["db1.example.com", "db2.example.com"]
},
"local": {
"hosts": ["localhost"]
},
"webservers": {
"hosts": ["web1.example.com", "web2.example.com"]
}
}
Para un formato más legible, podemos usar la opción --graph:
ansible-inventory --graph
Esto mostrará el inventario en una estructura de árbol:
@all:
|--@dbservers:
| |--db1.example.com
| |--db2.example.com
|--@local:
| |--localhost
|--@ungrouped:
|--@webservers:
| |--web1.example.com
| |--web2.example.com
Probando la Conexión al Host Local
Ejecutemos un comando ping simple para verificar que podemos comunicarnos con el host local:
ansible local -m ping
Debería ver una salida similar a:
localhost | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
Ejecutando un Comando Simple en los Hosts
También podemos ejecutar un comando en nuestros hosts usando el comando ansible. Dado que nuestros hosts de ejemplo no existen realmente, dirijámonos solo al host local:
ansible local -a "uname -a"
Esto ejecutará el comando uname -a en el host local y mostrará una salida similar a:
localhost | CHANGED | rc=0 >>
Linux ubuntu 5.15.0-1033-aws #37-Ubuntu SMP Wed Aug 16 07:38:46 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
Esto confirma que Ansible está utilizando correctamente nuestro archivo de inventario personalizado y puede ejecutar comandos en los hosts definidos en él.
Resumen
En este tutorial, aprendió cómo configurar y establecer la ruta de un archivo de inventario personalizado en Ansible. Ahora comprende:
- Qué es un archivo de inventario de Ansible y su ubicación predeterminada
- Cómo crear un archivo de inventario personalizado con grupos de hosts
- Cómo configurar Ansible para usar su archivo de inventario personalizado de forma predeterminada utilizando tanto el método del archivo de configuración como las variables de entorno
- Cómo verificar la configuración de su inventario utilizando varios comandos de Ansible
Estas habilidades le ayudarán a organizar su flujo de trabajo de automatización de Ansible de manera más eficiente. Al personalizar la ubicación del archivo de inventario, puede administrar mejor su infraestructura en función de la estructura y los requisitos de su proyecto.
Cuando trabaje en proyectos más grandes, es posible que desee explorar los inventarios dinámicos o usar Ansible Vault para proteger la información confidencial en sus archivos de inventario.


