Переменные 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.

results matching ""

    No results matching ""