Долгое время мой 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 в три часа ночи.
Решение открытое, весь код в репозитории. Если у вас похожая боль - забирайте, пользуйтесь.

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