Что такое динамические инвентори (dynamic inventory) в Ansible?

«Что такое динамические инвентори (dynamic inventory) в Ansible?» — вопрос из категории Ansible, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Динамический инвентори в 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-скрипты, которые опрашивали нашу внутреннюю базу данных серверов.