Что такое статический инвентарь (static inventory) в Ansible?

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

Ответ

Статический инвентарь в Ansible — это файл (обычно в формате INI или YAML), в котором вручную и явно перечислены все управляемые хосты, сгруппированные по логическим категориям. Это самый простой и прямой способ определения целевых машин для Ansible.

Пример в формате INI (inventory.ini):

# Группа веб-серверов
[webservers]
web-01.example.com ansible_user=ubuntu ansible_ssh_private_key_file=~/.ssh/web_key
web-02.example.com ansible_user=deploy

# Группа баз данных с переменной порта
[dbservers]
db-primary.example.com ansible_port=5432

# Группа, объединяющая другие группы (children)
[production:children]
webservers
dbservers

# Глобальные переменные для всех хостов
[all:vars]
ansible_python_interpreter=/usr/bin/python3
timezone=Europe/Moscow

Пример в формате YAML (inventory.yml):

all:
  hosts:
    web-01.example.com:
      ansible_user: ubuntu
    web-02.example.com:
      ansible_user: deploy
  children:
    webservers:
      hosts:
        web-01.example.com:
        web-02.example.com:
    dbservers:
      hosts:
        db-primary.example.com:
          ansible_port: 5432
    production:
      children:
        webservers:
        dbservers:
  vars:
    ansible_python_interpreter: /usr/bin/python3
    timezone: Europe/Moscow

Преимущества статического инвентаря:

  • Простота и прозрачность: Файл легко читать, редактировать и хранить в системе контроля версий (Git).
  • Полный контроль: Все хосты и переменные заданы явно.
  • Стабильность: Идеально подходит для инфраструктуры с фиксированным, редко меняющимся набором серверов (например, выделенные сервера, долгоживущие виртуальные машины).

Недостатки:

  • Ручное управление: Требует обновления вручную при добавлении или удалении хостов, что подвержено ошибкам.
  • Не подходит для динамических сред: Неэффективен в облачных средах с автоматическим масштабированием, где набор инстансов постоянно меняется.

Использование: Указать инвентарь можно через флаг -i или в конфигурационном файле ansible.cfg.

ansible-playbook -i inventory.ini site.yml

Для динамических сред используется динамический инвентарь — скрипт или плагин (для AWS EC2, Google Cloud, OpenStack и др.), который генерирует список хостов на лету, запрашивая его у провайдера.