Por último, la división de los tipos de variables y sus definiciones en sus propios archivos YAML se presenta brevemente en el paso final y funciona mejor para jerarquías de red más complejas.
1 – Archivo de inventario de hosts
Como se muestra en “Ansible: instalación y ejecución (1)”, Ansible funciona trabajando simultáneamente con múltiples hosts en su infraestructura. La forma preferida de hacer esto es asignar hosts en diferentes grupos dentro del archivo de inventario: /etc/ansible/hosts
1 – Archivo de inventario de hosts2 – Hosts y grupos3 – Variables de hosts y grupos4 – Grupos de grupos5 – Múltiples archivos de inventario
Este archivo es completamente configurable y se puede expandir o dividir en múltiples archivos de inventario. Hay una forma especial de inventario en Ansible conocida como inventario dinámico que se refiere a archivos de inventario o afirmaciones que se extraen de la nube u otras fuentes del lado del servidor. Sin embargo, esto no está cubierto en esta publicación.
2 – Anfitriones y Grupos
Como se vio en la primera publicación, el formato de estilo INI para un archivo de hosts de Ansible se parece a esto: Los corchetes [ ] contienen un nombre de grupo que se usa para decidir qué sistemas está controlando, en qué momento y con qué propósito. Esto hace posible aplicar acciones a nodos/hosts específicos cuando sea necesario. Además, los sistemas (nodos/hosts) se pueden atribuir a más de un grupo si es necesario, por lo que en el fragmento anterior, uno de los nodos de ejemplo podría ser tanto un servidor web como un servidor de base de datos, agregados a ambas entradas de grupo en el archivo. Los nombres de host también pueden ser nombres de dominio en lugar de direcciones IP sin formato si lo prefiere, y al agregar una gran cantidad de hosts si los nombres de dominio siguen un patrón numérico similar, puede usar rangos de números en lugar de agregarlos todos individualmente. Por último, los hosts que se ejecutan en puertos SSH no estándar, es decir, no 22, deben tener sus números de puerto SSH personalizados insertados después del nombre de host separados por dos puntos. O en su lugar, definido a través de variables de host/grupo (consulte el siguiente paso).
3 – Variables del anfitrión y del grupo
Las variables en los archivos de inventario se configuran por host o por grupo. Hay muchas de estas variables incorporadas que se ofrecen al usuario al construir el archivo. Aquí hay un ejemplo de dos variables de host, que le dicen explícitamente a Ansible que use SSH como tipo de conexión, con un nombre de usuario establecido: En la primera publicación en Ansible, expuse estas variables de host y el formato del archivo de manera diferente, usando:
Un nombre “vacío” para los hosts: nombre-servidor-1. Una variable de host que le da a este nombre una dirección IP a la que referirse: ansible_host=remote.one.ip.address. Otra variable de host con el nombre de usuario específico, como en el ejemplo anterior. – ansible_user=username Luego, una variable de host final que contiene el puerto SSH personalizado para usar al conectarse a este host – ansible_port=3980
Así es como se veía el diseño para este archivo: Las variables de grupo permiten que se apliquen opciones y configuraciones adicionales como las anteriores a todo un grupo a la vez. En lugar de tener que establecer las mismas variables para cada host cuando el valor de las variables es el mismo. Estos se definen creando un nuevo conjunto de corchetes [ ] que contienen el nombre del grupo al que desea aplicar las variables, seguido de una etiqueta que consta de un : y el término vars . Cuando se junta usando un grupo llamado “servidores web”, esto hace: [servidores web: vars] Las variables que desea aplicar al grupo se enumeran en líneas separadas; se muestra un ejemplo de todo esto en el siguiente fragmento de código:
4 – Grupos de Grupos
Existe otra forma de crear “grupos a partir de grupos” mediante el uso de la etiqueta :niños . A estos también se les pueden aplicar variables de grupo usando el mismo método en el último paso. Para hacer esta agrupación adicional, se crea un nuevo nombre de grupo y luego se le agrega el sufijo : etiqueta de niños que contendrá los grupos originales definidos. Para agregar variables de grupo a este nuevo grupo de un grupo, el nuevo nombre se agrega a otro grupo con la etiqueta :vars estándar. Como en la parte inferior de este fragmento de código: El concepto de agrupar grupos en más grupos teóricamente puede continuar indefinidamente. Otro nivel de agrupación se agrega a continuación para demostrar: De manera más realista, esto podría verse en términos de agrupar hosts de centros de datos locales en regiones y luego en un grupo de todo el país.
5 – Múltiples archivos de inventario
El archivo singular /etc/ansible/hosts está bien para configuraciones de red más pequeñas y contenidas, pero la práctica preferida en Ansible es no almacenar variables en el archivo principal de inventario de hosts. Al menos cuando se trata de diseños de hosts más grandes y complejos, o redes más grandes. Idealmente, las variables de host y grupo cuando se manejan configuraciones a gran escala deben almacenarse en archivos individuales. Archivos que son relativos al archivo de inventario principal. Como ejemplo, cualquier variable de grupo definida en el siguiente archivo: Se aplicará a cualquier host ubicado en el grupo de servidores web. Estos archivos de variables están escritos en YAML. Del mismo modo, cualquier variable del lenguaje principal definida en: Se aplican al host denominado nombre-servidor-1 desde el archivo de hosts original. Se sigue una mayor segmentación y organización de los archivos de host/inventario, pero no se cubre en esta publicación; consulte Entornos de varias etapas con Ansible para obtener más información sobre cómo se hace esto. Una futura tercera publicación sobre Ansible describirá los módulos que se pueden ejecutar como parte de un libro de jugadas o como comandos basados en ad-hoc.