ansible ejecutar variable global

8

Quiero crear un grupo de servidores, usando ansible.

En un libro de jugadas principal, incluyo algunos libros de jugadas secundarias.

- include: playbook_commandserver.yml
- include: playbook_agent.yml

En el playbook_commandserver.yml, creo el servidor de comandos (en aws). Luego, disparo un rol, que usa el set_factmódulo para recordar el nombre dns del servidor de comandos:

- name: Get hostname of command server
  shell: /usr/bin/host $(/usr/bin/curl -s http://ipecho.net/plain) | /usr/bin/awk '{print $5}' | /usr/bin/awk -F 'aws.com' '{print $1"aws.com"}'
  register: cs
- name: Set hostname of command server as fact
  set_fact: commandserver="{{ cs.stdout }}"

El commandserverhecho está disponible en el mismo juego, pero no en el mismo libro de jugadas ... y mucho menos en el playbook_agent.ymlque se incluye después. Y es exactamente allí, donde necesitaría acceder a ese hecho de servidor de comandos.

Entonces, ¿cómo se establecen / almacenan variables que son válidas para la ejecución completa de ansible?

He encontrado esto: /programming/26732241/ansible-save-registered-variable-to-file Sin embargo, para mí esto parece un truco feo.

¿No hay una mejor solución para este problema? ¿No hay forma de establecer una variable que sea válida para toda la ejecución de ansible?

doh-nutz
fuente

Respuestas:

12

Si, esto es posible. Cuando configura un hecho con el set_factmódulo, se puede acceder a este hecho a través de "hostvars". Entonces, si define su servidor de comandos variable de esta manera:

  - name: Set hostname of command server as fact
    set_fact: commandserver="{{ cs.stdout }}"

entonces puede acceder a esta variable en otros libros de jugadas incluidos del mismo juego de esa manera (el módulo de depuración es solo un ejemplo):

  - debug: msg="{{ hostvars['put the hostname in here']['commandserver'] }}"
A.Hab
fuente