Переменные Playbook
Существует множество различных способов определения переменных для использования в задачах.
Переменные могут передаваться через командную строку, когда вызывается ansible-playbook
, с параметром --extra-vars
:
ansible-playbook example.yml --extra-vars "foo=bar"
Кроме того, можно передавать дополнительные переменные, используя в кавычках JSON, YAML или даже передавая файл JSON или YAML напрямую, например, --extra-vars "@even_more_vars.json"
или --extra-vars "@even_more_vars.yml
, но на этом этапе, возможно, лучше использовать один из следующих методов.
Переменные могут быть прописаны инлайном в playbook в раздел vars:
---
- hosts: example
vars:
foo: bar
tasks:
# Prints "Variable 'foo' is set to bar".
- debug: msg="Variable 'foo' is set to {{ foo }}"
Переменные могут также включаться в отдельный файл с помощью раздела vars_files:
# Main playbook file.
- hosts: example
vars_files:
- vars.yml
tasks:
- debug: msg="Variable 'foo' is set to {{ foo }}"
---
# Файл переменных 'vars.yml'
foo: bar
Файлы переменных также могут быть импортированы условно. Предположим, например, что у вас есть один набор переменных для серверов CentOS (где служба Apache называется httpd), а другая — для ваших Debian серверов (где служба Apache называется apache2). В этом случае можно использовать условный vars_files:
- hosts: example
vars_files:
- [ "apache_{{ ansible_os_family }}.yml", "apache_default.yml" ]
tasks:
- service: name={{ apache }} state=running
Затем добавьте два файла в каталог с вашим playbook - apache_CentOS.yml и apache_default.yml. Определите переменную apache: httpd
в файле CentOS и apache: apache2
в файле default.
Если удаленный сервер имеет установленный facter или ohai, Ansible сможет считать операционную систему сервера, перевести ее в переменную (ansible_os_family) и включить в нее файл с полученным именем. Если Ansible не удается найти файл с таким именем, он будет использовать второй вариант (apache_default.yml).
Таким образом, на сервере Debian или Ubuntu Ansible будет корректно использовать apache2 в качестве имени службы, даже если отсутствует apache_Debian.yml или apache_Ubuntu.yml.