Для чего используется инвентарь (inventory) в Ansible?

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

Ответ

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

Что я могу определить в инвентаре:

  1. Группировка хостов: Логическое объединение серверов по ролям (webservers, databases) или средам (prod, stage). Это позволяет запускать плейбуки на конкретной группе: ansible-playbook deploy.yml -l webservers.
  2. Задание переменных: Переменные можно задавать на уровне группы или отдельного хоста (например, версия пакета, путь конфигурации).
  3. Параметры подключения: Указание пользователя, порта SSH, приватного ключа, типа соединения (ssh, winrm) для каждого хоста или группы.

Пример статического инвентаря в формате INI (inventory/prod.ini):

[webservers]
web-prod-01 ansible_host=192.168.1.10
web-prod-02 ansible_host=192.168.1.11

[databases]
db-prod-01 ansible_host=192.168.2.10

[webservers:vars]
ansible_user=deploy
ansible_ssh_private_key_file=~/.ssh/deploy_key

[all:vars]
ansible_python_interpreter=/usr/bin/python3

Пример динамического инвентаря: В облачных средах (AWS, GCP) я использовал скрипты или плагины (например, amazon.aws.aws_ec2), которые генерируют инвентарь на лету, запрашивая список инстансов через API облачного провайдера. Это позволяет автоматически включать в управление новые созданные серверы.

Использование в плейбуке:

- name: Install Nginx on web servers
  hosts: webservers  # <- здесь указывается группа из инвентаря
  tasks:
    - name: Install nginx package
      apt:
        name: nginx
        state: present

Правильно организованный инвентарь — основа масштабируемой и поддерживаемой инфраструктуры как код (IaC) с Ansible.