Ответ
Статический инвентарь в 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 и др.), который генерирует список хостов на лету, запрашивая его у провайдера.
Ответ 18+ 🔞
А, ну вот, смотри, классика жанра! Статический инвентарь в 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
Чем это хорошо, ёпта?
- Проще некуда: Открыл файл — и сразу видно, где что. Можно в гите хранить, историю изменений смотреть. Прозрачность — доверия ебать стопроцентное.
- Всё под контролем: Ты сам, как бог, решаешь, какой хост куда попадает и какие у него переменные. Никаких сюрпризов.
- Для спокойной жизни: Идеально, когда у тебя инфраструктура стабильная, сервера не бегают туда-сюда как угорелые. Поставил и забыл.
А чем плохо, бля?
- Ручная работа, сука: Добавился новый сервер? Садись, обновляй файлик. Удалился старый? Снова лезь, вычищай. Забыл — и плейбук полетит в хуй с горы, пытаясь достучаться до несуществующей машины. Очень быстро надоедает.
- Для динамики — полный пиздец: Представь облако, где инстансы сами создаются и убиваются по расписанию или нагрузке. Тут с таким статическим подходом ты просто охуеешь от количества рутины. Не, это не наш метод.
Как юзать? Да элементарно, указал путь к файлу — и вперёд.
ansible-playbook -i inventory.ini site.yml
А для тех самых динамических сред, где всё пляшет, придумали динамический инвентарь. Это уже не файл, а скрипт или плагин, который на лету у AWS или Google Cloud спрашивает: "Э, пацаны, а какие у вас сейчас виртуалки крутятся?" И получает свежий список. Вот это уже ближе к реальности, где всё живёт и меняется.