глобальная переменная ANSIBLE Run

8

Я хочу создать кластер серверов, используя ansible.

В одну главную книгу игр я включил несколько дополнительных книг.

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

В playbook_commandserver.yml я создаю сервер команд (на aws). Затем я запускаю роль, которая использует set_factмодуль для запоминания имени DNS командного сервера:

- 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 }}"

commandserverФакт доступен в одной и той же игре, но не в том же сборника пьес .. не говоря уже в playbook_agent.yml, который получает включены, после этого. И это именно там, где мне нужно было бы получить доступ к факту командного сервера.

Так как же установить / сохранить переменные, которые действительны для полного запуска?

Я нашел это: /programming/26732241/ansible-save-registered-variable-to-file Однако для меня это выглядит как уродливый хак.

Нет ли лучшего решения этой проблемы? Нет ли способа установить переменную, которая действительна для всего цикла запуска?

DOH-Nutz
источник

Ответы:

12

Да, это возможно Когда вы устанавливаете факт с помощью set_factмодуля, этот факт доступен через "hostvars". Итак, если вы определите свой переменный сервер команд следующим образом:

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

затем вы можете получить доступ к этой переменной в других включенных книгах воспроизведения той же игры таким образом (модуль отладки - только пример):

  - debug: msg="{{ hostvars['put the hostname in here']['commandserver'] }}"
A.Hab
источник