Назад | Перейти на главную страницу

доступная глобальная переменная запуска

Я хочу создать кластер серверов, используя 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, который потом будет включен. И это именно там, где мне нужно было бы получить доступ к этому факту командного сервера.

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

Я нашел вот это: https://stackoverflow.com/questions/26732241/ansible-save-registered-variable-to-file Однако мне это кажется уродливым взломом.

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

Да, это возможно. Когда вы устанавливаете факт с помощью 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'] }}"