¿Cómo acceder a la variable de host de un host diferente con Ansible?

Pregunta:

Digamos que tengo un host que recopila algunos datos y
está en un grupo [collectors] . También tengo anfitriones en el grupo [reporters] .
Entonces, quiero establecer una variable en los reporteros de los groups['collectors'][0] dirección IP. Pero el libro de jugadas para crear reporteros no se ejecuta en el grupo [collectors] , por lo que no se recopilan datos para este anfitrión. ¿Hay alguna forma de no codificar la dirección IP?

Respuesta:

Puede acceder a prácticamente cualquier dato / variable de inventario haciendo algo como esto:

{{ hostvars['foo.example.com']['ansible_eth0']['ipv4']['address'] }}

o, si desea hacerlo a través de un índice en un grupo:

{{ hostvars[groups['collectors'][0]]['ansible_eth0']['ipv4']['address'] }}

El gran truco es que debe recopilar los datos de todos los hosts / grupos que le interesan. Por lo tanto, querrá modificar su libro de jugadas que se ejecuta en contra del grupo de reporteros para incluir una tarea no operativa (ficticia) que se aplique al grupo de coleccionistas. Eso hará que Ansible recopile datos sobre los anfitriones de los recolectores para que se pueda acceder a ellos desde el grupo de reporteros. Por lo tanto, es posible que desee agregar algo como esto en la parte superior de su libro de jugadas de reporteros:

- hosts: collectors
  name: Gather facts from collectors
  tasks: [ ]

Los corchetes vacíos básicamente significan que no se ejecutarán tareas, pero esto aún obligará a Ansible a recopilar datos sobre los recolectores para que luego pueda hacer referencia a ellos en las tareas que ejecuta contra sus reporteros.

Editar # 1

Se me ocurrió que también debería mencionar que a partir de la versión 1.8 de Ansible, hay una función de almacenamiento en caché que ahora está disponible. El almacenamiento en caché de datos se basa en un servidor Redis para almacenar datos entre ejecuciones del libro de jugadas. Cuando está habilitado, un libro de jugadas puede hacer referencia a hechos que se obtuvieron con otro libro de jugadas que se ejecutó anteriormente. El ejemplo que da la documentación de Ansible:

Imagine, por ejemplo, una infraestructura muy grande con miles de hosts. El almacenamiento en caché de datos se puede configurar para que se ejecute todas las noches, pero la configuración de un pequeño conjunto de servidores puede ejecutarse ad-hoc o periódicamente durante el día. Con el almacenamiento en caché de hechos habilitado, no sería necesario "acceder" a todos los servidores para hacer referencia a variables e información sobre ellos.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım