Группы и group_vars
Тема дорожной карты · Ansible
group_vars — это соглашение Ansible по каталогам для определения переменных, применяемых ко всем хостам, принадлежащим определённой группе inventory, при этом определения переменных хранятся отдельно как от файла inventory, так и от playbook. Переменные хранятся в файлах, названных по группе, — group_vars/webservers.yml применяется к группе webservers, тогда как group_vars/all.yml применяется ко всем хостам, — или в каталоге с именем группы, содержащем несколько файлов переменных (например, group_vars/webservers/nginx.yml). Механизм group_vars поддерживает наследование переменных: хост, принадлежащий нескольким группам, наследует переменные от всех них, а приоритет определяется документированным порядком приоритета переменных Ansible. Разделение конфигурации по группам в файлах group_vars — это основополагающая лучшая практика Ansible, поскольку она делает различия, специфичные для среды (например, разные конечные точки баз данных для staging и production), явными и рецензируемыми в системе контроля версий.
Как это работает
Группы и group_vars перечисляет целевые хосты и их группировки. INI-формат ([webservers]\nweb1.example.com) или YAML (предпочтительно для сложных структур, group_vars, host_vars). Dynamic inventory-плагины запрашивают AWS, GCP, Azure, Yandex Cloud, Kubernetes для живых списков хостов. Переменные — в group_vars/<group>.yml и host_vars/<host>.yml директориях, auto-loaded ansible-ом. Группы вложаемы; хосты в нескольких группах одновременно.
Когда применять
Статичный YAML inventory — для десятков хостов; динамический — когда облако меняет хосты быстрее, чем вы обновляете YAML. Группируйте по назначению (webservers, databases, monitoring) и по среде (production, staging) — хосты могут быть в обоих. Env-специфичный конфиг — в group_vars/<env>.yml. Sensitive group_vars — Ansible Vault.
Типичные ошибки
Ловушки Группы и group_vars: один огромный hosts.ini на всё (невозможно навигировать после 100 хостов); смешение имён хостов и IP (изменения DNS тихо ломают); коммит inventory с секретами в host_vars/ (vault-шифрованные файлы); ad-hoc команды против all вместо конкретной группы ("ой я запустил shutdown на каждом сервере").