Что такое Inventory в Ansible?

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

Ответ

Inventory (инвентаризация) в Ansible — это источник данных, который определяет хосты и группы хостов, на которых будут выполняться задачи из плейбуков. По сути, это список целей для автоматизации.

Формат и расположение: По умолчанию это файл в формате INI или YAML, обычно расположенный в /etc/ansible/hosts или указываемый флагом -i.

Пример INI-инвентаря:

# Определение хостов по IP или FQDN
web1.example.com
192.168.1.101

# Группировка хостов
[webservers]
web1.example.com
web2.example.com ansible_port=2222 # Переопределение порта для конкретного хоста

[dbservers]
db-primary.example.com
db-replica.example.com

# Группы групп (nested groups)
[eu:children]  # Группа 'eu' состоит из детей
webservers
dbservers

[eu:vars]      # Переменные для всей группы 'eu'
ansible_user=deploy
timezone=Europe/London

Пример YAML-инвентаря (inventory.yml):

all:
  hosts:
    web1.example.com:
    web2.example.com:
      ansible_port: 2222
  children:
    webservers:
      hosts:
        web1.example.com:
        web2.example.com:
    dbservers:
      hosts:
        db-primary.example.com:
        db-replica.example.com:
      vars:
        db_role: primary
    eu:
      children:
        webservers:
        dbservers:
      vars:
        ansible_user: deploy

Ключевые возможности:

  1. Динамический Inventory: Вместо статического файла можно использовать скрипт (Python, любой исполняемый файл), который генерирует инвентарь на лету, запрашивая его у облачного провайдера (AWS EC2, GCP), CMDB или другой системы.
    ansible-playbook -i aws_ec2.yml site.yml
  2. Шаблоны для выбора хостов:

    # Запуск плейбука на всех хостах группы 'webservers'
    ansible-playbook -i inventory.yml playbook.yml --limit webservers
    
    # Запуск на хостах, соответствующих шаблону
    ansible all -i inventory.yml -m ping -l 'web*'
  3. Переменные на разных уровнях: Переменные можно задавать для всего инвентаря, группы или конкретного хоста, что позволяет гибко управлять конфигурацией.