Ответ
Эти папки определяют приоритет переменных, что является ключевым механизмом гибкости и переопределения в Ansible.
Иерархия приоритетов (от низшего к высшему):
- Роль:
defaults/main.yml— значения по умолчанию. Имеют самый низкий приоритет. - Инвентарь:
group_vars/,host_vars/. - Роль:
vars/main.yml— фактические переменные роли. Переопределяютdefaultsи инвентарь. - Playbook-переменные (
vars:). - Факты, обнаруженные Ansible (
gather_facts). --extra-vars(ключ-e) — наивысший приоритет.
Практическое применение:
defaults/main.yml: Используется для параметров, которые ожидаемо будут меняться под разные окружения (порт, версия пакета, путь установки).# defaults/main.yml app_port: 8080 app_version: "1.0.0"vars/main.yml: Используется для фиксированных, внутренних для роли значений, которые не должны меняться извне (например, имя системного юнита или внутренний путь конфигурации).# vars/main.yml service_name: "my_application" config_template: "config.j2"
Пример: Если в defaults указан port: 80, а в group_vars/production.yml — port: 443, то в production будет использован порт 443. Переменные из vars/main.yml роли переопределят оба этих значения, если не задать --extra-vars "port=8080".