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