Ответ
Динамический инвентори в Ansible — это способ автоматически получать актуальный список хостов для управления из внешних источников (облачных провайдеров, VMware, CMDB), вместо ручного редактирования статического INI- или YAML-файла. Я использую его для работы с быстро меняющейся облачной инфраструктурой.
Как это работает: Ansible выполняет специальный скрипт или использует плагин, который возвращает JSON со структурой инвентори. Этот JSON может включать группы хостов, переменные и метаданные.
Пример использования плагина aws_ec2 для Ansible (inventory_aws.yml):
plugin: aws_ec2
regions:
- eu-west-1
filters:
tag:Environment: production
instance-state-name: running
keyed_groups:
- key: tags.Role
prefix: role
compose:
ansible_user: "'ubuntu'"
Запуск плейбука с таким инвентори:
ansible-playbook -i inventory_aws.yml deploy.yml
Преимущества, которые я ценю:
- Актуальность: Всегда работаю с реальными, запущенными инстансами. Новые сервера в Auto Scaling Group автоматически попадают в управление.
- Метаданные из облака: Автоматически получаю теги инстансов (Name, Role, Environment) как переменные Ansible, что позволяет создавать гибкие плейбуки.
- Безопасность: Не нужно хранить IP-адреса в репозитории. Подключаюсь к хостам по их приватным DNS-именам из AWS.
Для локальных сред я использовал плагин для VMware или писал простые Python-скрипты, которые опрашивали нашу внутреннюю базу данных серверов.