Я прочитал несколько документов, включая вот этот и проверил несколько доступных ролей на GitHub, но мне неясно, когда определять переменную и когда она определена, где ее поместить, т.е. в defaults
, tasks
или vars
каталог.
Я хотел бы получить рекомендации, чтобы мне не приходилось тратить много времени на размышления о том, требуется ли переменная, и если это так, куда ее поместить.
sensu_host: localhost
sensu_home: /etc/sensu
sensu_conf_d: "{{ sensu_home }}/conf.d"
- name: be sure {{ item }} is installed
apt:
name: "{{ item }}"
state: latest
with_items:
- build-essential
- ntp
или элементы должны быть определены в переменной:
- name: be sure {{ item }} is installed
apt:
name: "{{ item }}"
state: latest
with_items:
{{ packages }}
__sensu_repo_url: deb http://sensu.global.ssl.fastly.net/apt sensu main
__sensu_repo_key_url: http://sensu.global.ssl.fastly.net/apt/pubkey.gp
Есть ли определенный контрольный список, например
Если a, b, c, тогда переменная должна быть объявлена по умолчанию
если d, e, f, то v
если g, h, i, то определите его в задачах
╔═══════════╦═════════════════╗
║ directory ║ characteristics ║
╠═══════════╬═════════════════╣
║ defaults ║ constants, e.g. ║
║ tasks ║ bla, e.g. ║
║ vars ║ variables ║
╚═══════════╩═════════════════╝
Нет никаких политик для определения переменных и констант в каталогах vars и defaults.
Переменные в role/defaults
каталог имеют самый низкий приоритет. Поэтому имеет смысл поместить все переменные, определенные в роли, в role/defaults/main.yml
для справки. Если значение переменной по умолчанию зависит от дистрибутива, я помещаю его в vars/{{ ansible_os_family }}.yml
и включите это так:
# Variable setup.
- name: Include OS-specific variables.
include_vars: "{{ ansible_os_family }}.yml"
Я также помещаю переменные, которые являются постоянными, например URL-адреса, в vars
также.
Но опять же нет настоящей политики. Вам решать, как что-то делать. Я лично ориентирую свою ролевую структуру и стиль игры на Geerlingguy.