Ответ
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
Ключевые возможности:
- Динамический Inventory: Вместо статического файла можно использовать скрипт (Python, любой исполняемый файл), который генерирует инвентарь на лету, запрашивая его у облачного провайдера (AWS EC2, GCP), CMDB или другой системы.
ansible-playbook -i aws_ec2.yml site.yml -
Шаблоны для выбора хостов:
# Запуск плейбука на всех хостах группы 'webservers' ansible-playbook -i inventory.yml playbook.yml --limit webservers # Запуск на хостах, соответствующих шаблону ansible all -i inventory.yml -m ping -l 'web*' - Переменные на разных уровнях: Переменные можно задавать для всего инвентаря, группы или конкретного хоста, что позволяет гибко управлять конфигурацией.