Твой Ansible-инвентарь устарел ещё до того, как ты его открыл
Артур Хайбуллин
Артур Хайбуллин 19 июн 2026, 03:27
inv_builder_image.jpg

Долгое время мой Ansible-инвентарь выглядел так: открываешь Proxmox, смотришь что там запущено, лезешь в inventory.yaml руками править. Потом забываешь добавить новую VM, раскатываешь плейбук, пайплайн падает, и ты такой: «а, ну да, я же не прописал хост».

Было такое? Если да, то этот пост для тебя.

Я написал скрипт и поместил его в пайплайн Gitlab, который ходит напрямую в API Proxmox VE, собирает данные по всем запущенным VM и LXC, и выдает всё это в виде inventory.yaml для Ansible.

Из красивого: теги в Proxmox автоматически превращаются в Ansible-группы: повесил на VM тег docker - она сразу в группе docker. Повесил nginx - в nginx. Всё.

Зачем мне это?

Потому что я ленивый. Я не хочу помнить, где что стоит и крутится)) Я хочу чтобы инфраструктура сама рассказывала Ansible, как она устроена. А я буду пить кофе и смотреть на зелёный пайплайн.

Что скрипт делает конкретно:

  • Дёргает /api2/json/cluster/resources?type=vm в Proxmox.

  • Отфильтровывает только работающие хосты (остановленные нас не интересуют).

  • Превращает имя VM в FQDN, добавляя доменный суффикс (конфигурируется через переменную пайплайна).

  • Группирует по тегам - один тег = одна Ansible-группа.

  • Дополнительно пихает VM в proxmox_vms, а LXC в proxmox_lxcs.

  • Если inventory.yaml изменился - сам коммитит его в репозиторий.

Заливаешь это в GitLab, настраиваешь расписание раз в 6 часов, и забываешь. Работает, проверено.

В стэке: Python 3, requests, PyYAML.

В .gitlab-ci.yml уже всё расписано - забрать образ python:3.12-slim, поставить зависимости, запустить скрипт, закоммитить изменения. Никаких сторонних раннеров, никакого JDK или прочего оверкилла.

Единственное что - Proxmox API токен надо создать. Делается в вебке за 30 секунд: Datacenter > Permissions > API Tokens.

Минимальные права:

  • VM.Audit,

  • Sys.Audit. Или просто снимите Privilege Separation и не парьтесь - токен получит права пользователя.

Я знаю, что идеальный мир выглядит как Terraform + Consul Service Discovery + Vault + GitOps в придачу. Но для домашнего кластера, где VM плодятся быстрее чем ты успеваешь вести документацию, такой подход сильно вывозит. Это не серебряная пуля, это просто рабочий инструмент, который решает одну конкретную проблему.

И да, я в курсе про dynamic inventory плагины для Ansible. Они хороши, когда у тебя везде настроенная авторизация и инфраструктура как код. В реальности же частенько проще сгенерировать статический файл и скормить его Ansible, чем разбираться почему dynamic inventory plugin не видит твой самоподписанный сертификат Proxmox в три часа ночи.

Решение открытое, весь код в репозитории. Если у вас похожая боль - забирайте, пользуйтесь.

https://gitlab.geekrack.ru/devops/inventory-builder

0
160
Комментарии (0)
Комментировать
Пока нет комментариев

Станьте первым, кто прокомментирует эту запись