Подтвердить что ты не робот

Необязательная переменная playbook

У меня есть плейер с несколькими разделами хостов. Я хотел бы определить переменную в этом файле playbook.yml, который применяется только в файле, например:

vars:
  my_global_var: 'hello'

- hosts: db
  tasks:
   -shell: echo {{my_global_var}} 

- hosts: web
  tasks:
   -shell: echo {{my_global_var}} 

Приведенный выше пример не работает. Я должен либо дублировать переменную для каждой секции хоста (плохо), либо определять ее на более высоком уровне, например, в моем group_vars/all (не то, что я хочу, но работает). Я также знаю, что файлы переменных могут быть включены, но это влияет на читаемость. Любое предложение получить его в правильном объеме (например, сам файл для воспроизведения)?

4b9b3361

Ответ 1

Модуль set_fact выполнит это, если group_vars не соответствует вашим потребностям.

http://docs.ansible.com/ansible/set_fact_module.html

Этот модуль позволяет устанавливать новые переменные. Переменные задаются на основе хоста по хосту, как и факты, обнаруженные модулем настройки. Эти переменные будут > выживать между играми во время прогона Ansible, но не будут сохранены в > исполнениях, даже если вы используете кеш факсов.

- hosts: db:web
  tasks:
  - set_fact: my_global_var='hello'

- hosts: db
  tasks:
  -shell: echo {{my_global_var}} 

- hosts: web
  tasks:
  -shell: echo {{my_global_var}} 

Ответ 2

Я предпочитаю хранить глобальные переменные в файле инвентаризации, где хранятся группы и имена ваших хостов.

Например:

my-hosts:

[all:vars]
my_global_var="hello"

[db]
db1
db2
[web]
web1
web2

Запустите свой плей-лист с помощью:

ansible-playbook -i my-hosts playbook.yml

Теперь переменная будет определена для всех хостов.

Если вы используете ec2.py или какой-либо другой динамический ресурс, вы можете поместить глобальные переменные в файл group_vars/all для достижения тот же результат.