Biblioteca Online : ¡La Suscripción ENI por 9,90 € el primer mes!, con el código PRIMER9. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Ansible
  3. Descubriendo el inventario
Extrait - Ansible Administre la configuración de sus servidores y el despliegue de sus aplicaciones
Extractos del libro
Ansible Administre la configuración de sus servidores y el despliegue de sus aplicaciones Volver a la página de compra del libro

Descubriendo el inventario

Objetivos del capítulo y requisitos

En el capítulo anterior, vio cómo se instalaba Ansible y cómo ejecutar algunos comandos en la máquina local. Ahora verá como enviar sus acciones a distintas máquinas y beneficiarse de la capacidad de ejecución de operaciones en paralelo de Ansible.

1. Contexto y requisitos

Los ejemplos que se tratarán en este capítulo darán por sentado que:

  • dispone de máquinas Linux en las que ha efectuado el intercambio de clave SSH (ver capítulo Iniciarse en Ansible);

  • dispone de permisos root en las máquinas.

2. Archivos descargables

Puede encontrar los ejemplos de los directorios inventarios y variables en el archivo comprimido capitulo-03.tar.gz que se encuentra en la página del libro en el sitio de Ediciones ENI.

Estructura de un inventario

El inventario en Ansible es un archivo de formato INI. La declaración de un grupo se hace usando el nombre del grupo entre corchetes. Las máquinas vinculadas a este grupo están simplemente incluidas después de la declaración del grupo (una máquina por cada línea).

Tome un ejemplo con los elementos siguientes:

  • un grupo apache compuesto por la máquina rec-apache-1;

  • un grupo mysql con la máquina rec-mysql-1.

Aquí abajo encontrará un archivo de inventario que corresponde a esta declaración: 

[apache] 
rec-apache-1 
 
[mysql] 
rec-mysql-1 

Tenga en cuenta que es posible almacenar esta declaración bajo la forma de un archivo YAML. En este caso, la declaración tendrá la forma siguiente:

apache: 
  hosts: 
    rec-apache-1: {} 
 
mysql: 
  hosts: 
    rec-mysql-1: {} 

A partir de ahora, el archivo se llamará archivo de host o archivo de inventario. Se podrá acceder a él bajo el nombre receta.inv (en formato INI) o receta.yml (en formato YAML).

Para llamarlo, habrá que utilizar la opción -i en el comando ansible con el nombre del archivo. 

 Con el fin de comprobar que la comunicación con las máquinas remotas funciona correctamente, puede ejecutar ansible con el módulo ping (utilizando el nombre del módulo con la opción -m).

He aquí un ejemplo del comando usando un inventario YAML:

$ ansible -i receta.yml -m ping all 

Si todo va bien, Ansible debería darnos el resultado siguiente:

rec-mysql-1 | SUCCESS => { 
   "changed": false, 
   "ping": "pong" 
} 
rec-apache-1 | SUCCESS => { 
   "changed": false, 
   "ping": "pong" 
} 

1. Grupos por defecto

Además de los que declara en su inventario, existen dos grupos más: all y ungrouped. El primero contiene todas las máquinas del inventario. Las máquinas que no están vinculadas a ningún grupo (es el caso de localhost si no lo declara en su inventario) formarán parte del grupo ungrouped.

Una manera simple de consultar esta lista es a través del comando...

Fusión de inventarios

Ansible es capaz de fusionar distintos archivos de inventarios que se encuentren en el mismo directorio. El problema de esta técnica es que no es posible controlar los archivos que se utilizan como parámetro en Ansible a no ser que se copien temporalmente los archivos en el directorio de trabajo. El problema es exactamente el mismo en el caso de que los archivos se encuentren en directorios diferentes. 

Las versiones recientes de Ansible permiten acumular en la línea de comando la lista de los inventarios. De este modo, en lugar de enviar una ubicación donde están almacenados los archivos de inventarios, se pueden llamar uno a uno usando la opción --inventory (o -i).

Por lo tanto, para ejecutar el módulo ping en el conjunto de las máquinas de los inventarios receta.yml y produccion.yml, el comando que se tiene que ejecutar sería:

$ ansible -m debug -I receta.yml -I produccion.yml all 

Aquí encontrará el resultado del comando:

prod-haproxy | SUCCESS => { 
    "msg": "Hello world!" 
} 
... 
active-directory-1 | SUCCESS => { 
    "msg": "Hello world!" 
} 
container-1 | SUCCESS => { 
    "msg": "Hello world!" 
}