Ответ
Инвентарь в Ansible — это источник истины о том, на каких хостах и в каких группах выполняются мои плейбуки. По сути, это список целевых машин. Я использую его для организации, группировки и настройки параметров подключения к хостам.
Что я могу определить в инвентаре:
- Группировка хостов: Логическое объединение серверов по ролям (
webservers,databases) или средам (prod,stage). Это позволяет запускать плейбуки на конкретной группе:ansible-playbook deploy.yml -l webservers. - Задание переменных: Переменные можно задавать на уровне группы или отдельного хоста (например, версия пакета, путь конфигурации).
- Параметры подключения: Указание пользователя, порта 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.