Автоматизация Proxmox с помощью Pulumi: Полное руководство
Перед тем, как перейти к Pulumi, мы раскроем основное преимущество автоматизации инфраструктуры. Автоматизация инфраструктуры позволяет быстро, предсказуемо и воспроизводимо развертывать окружение. Таким образом компании могут автоматически управлять ИТ-ресурсами (серверы, контейнеры и облачная инфраструктура). Автоматизация позволяет исключить ручные процессы. Ранее в статье о Proxmox мы описали, как использовать шаблоны виртуальных машин Proxmox в сочетании с Cloud-Init. Это уже даёт нам быстрый и предсказуемый процесс развертывания VM. Но чтобы довести автоматизацию до уровня "одной команды", нам нужен инструмент, который умеет описывать инфраструктуру как код. Одним из таких инструментов является Pulumi - современная IaC-платформа, позволяющая писать инфраструктурный код на современных языках программирования: Python, Go, C#, Java, TypeScript. В этой статье мы разберём, как Pulumi помогает автоматизировать создание VM в Proxmox, начиная с установки и заканчивая рабочим примером с помощью python.
Что такое Pulumi?
Pulumi - это open-source инструмент для управления инфраструктурой через код. Его ключевые особенности:
- использует универсальные языки программирования, а не DSL (как Terraform).
- работает с основными облачными платформами, которые использует большинство компаний
- данные об инфраструктуре можно хранить локально или используя S3, Pulumi Cloud.
- позволяет писать логику, циклы, условия, функции - всё, что доступно в языках программирования.
Для Proxmox существует провайдер pulumi-proxmoxve, который позволяет управлять:
- виртуальными машинам (VM);
- шаблонами;
- дисками;
- сетевыми интерфейсами;
- cloud-init параметрами.
Шаг 1: Установка Pulumi
Pulumi можно установить на все популярные ОС:
Установка Pulumi на MacOS
brew install pulumi/tap/pulumi
Установка Pulumi на Windows
Скачиваем инстраллер с официального сайта Pulumi
Установка Pulumi на Linux
curl -fsSL https://get.pulumi.com | sh
После установки Pulumi добавляется в ~/.pulumi/bin. Если по каким-то причинам переменная PATH не обновилась:
export PATH=$PATH:$HOME/.pulumi/bin
echo 'export PATH=$PATH:$HOME/.pulumi/bin' >> ~/.bashrc
source ~/.bashrc
Проверяем установку
pulumi version
Если всё прошло успешно - увидим номер версии.
Шаг 2. Настройка Pulumi для работы с Proxmox
Чтобы Pulumi мог управлять Proxmox, ему нужен доступ к API.
2.1. Включаем API-доступ в Proxmox
- Открываем Proxmox Web UI
- Переходим: Datacenter → Permissions → API Tokens
- Создаём токен для пользователя, например root@pam
- Ставим галочку Privilege Separation = false (если хотим полный доступ)
- Копируем:
- Token ID
- Secret
- Добавляем права: Datacenter → Permissions → Add → Api token:
- Path → /
- Api token → Название токена
- Role → Administrator
Шаг 3. Создаём Pulumi проект
mkdir pulumi-proxmox
cd pulumi-proxmox
pulumi new python
Pulumi создаст структуру:
Pulumi.yaml
__main__.py
requirements.txt
Устанавливаем провайдер:
pip install pulumi-proxmoxve
Pulumi предоставляет свой встроенный конфиг, c которым и будем работать:
pulumi config set proxmox:endpoint https://192.168.0.128:8016/
pulumi config set proxmox:api-name root@pam!pulumi
pulumi config set proxmox:public-key: "ssh-key"
pulumi config set proxmox:api-token "api token" --plaintext
Шаг 4. Пример кода: создание VM из шаблона
Теперь самое интересное - создадим VM из шаблона, который мы подготовили ранее.
Импорт провайдера:
# python
import pulumi
from pulumi_proxmoxve import Provider
from pulumi_proxmoxve.vm import VirtualMachine
Загружаем конфигурацию Pulumi:
# python
config = pulumi.Config("proxmox")
endpoint = config.require("endpoint")
public_key = config.require("public-key")
api_token = config.require_secret("api-token")
api_name = config.require("api-name")
Подключение к Proxmox API:
# python
provider = proxmoxve.Provider(
"proxmoxve",
endpoint=endpoint,
api_token=f"{api_name}={api_token}",
insecure=True
)
Создание VM из шаблона:
vm = proxmoxve.vm.VirtualMachine(
resource_name="vm-test",
node_name="srv0",
vm_id=9875,
name="pulumi-vm-test",
agent=proxmoxve.vm.VirtualMachineAgentArgs(
enabled=False,
trim=True,
type="virtio"
),
bios="seabios",
memory=proxmoxve.vm.VirtualMachineMemoryArgs(
dedicated=4096
),
cpu=proxmoxve.vm.VirtualMachineCpuArgs(
cores=2,
sockets=1
),
clone=proxmoxve.vm.VirtualMachineCloneArgs(
node_name="srv0",
vm_id=9000,
full=True
),
disks=[
proxmoxve.vm.VirtualMachineDiskArgs(
interface="scsi0",
datastore_id="local-lvm",
size=20,
file_format="qcow2"
)
],
cdrom=proxmoxve.vm.VirtualMachineCdromArgs(
interface="ide2",
file_id="none"
),
network_devices=[
proxmoxve.vm.VirtualMachineNetworkDeviceArgs(
bridge="vmbr0",
model="virtio"
)
],
on_boot=True,
operating_system=proxmoxve.vm.VirtualMachineOperatingSystemArgs(type="other"),
initialization=proxmoxve.vm.VirtualMachineInitializationArgs(
type="nocloud",
datastore_id="local-lvm",
dns=proxmoxve.vm.VirtualMachineInitializationDnsArgs(
domain="example.com",
servers=["1.1.1.1", "8.8.8.8"]
),
ip_configs=[
proxmoxve.vm.VirtualMachineInitializationIpConfigArgs(
ipv4=proxmoxve.vm.VirtualMachineInitializationIpConfigIpv4Args(
address="192.168.0.140/24",
gateway="192.168.0.1"
)
)
],
user_account=proxmoxve.vm.VirtualMachineInitializationUserAccountArgs(
username="user",
password="password123",
keys=[public_key]
)
),
opts=pulumi.ResourceOptions(provider=prov
Шаг 5. Запуск автоматического создания VM в Proxmox
Просмотр плана:
pulumi preview
Применение:
pulumi up
Pulumi покажет, что будет создана VM, и попросит подтверждение. После подтверждения -VM появится в Proxmox.
Шаг 6. Очистка среды: удаление VM через Pulumi
Если больше не требует vm:
pulumi destroy
Результаты: Что даёт автоматизация Proxmox через Pulumi
- Полностью автоматизированный процесс создания VM.
- Использование шаблона + Cloud-Init.
- Управление через Python-код.
- Возможность создавать десятки VM одной командой.
Такой подход легко масштабируется: можно генерировать VM в цикле, создавать пулы ресурсов, автоматически подключать их к сетям и интегрировать всё это в CI/CD. Для более детального изучения мы советуем ознакомиться с официальной документацией Proxmox и следить за обновлениями наших статей.
Мы предоставляем услуги в следующих областях:
- Azure и Proxmox — миграция и оптимизация инфраструктуры;
- разработка защищённых шаблонов VM;
- CI/CD автоматизация — от настройки до аудита безопасности.
Чтобы узнать больше о том, как мы реализуем безопасные решения автоматизации, посетите раздел DevOps на нашем сайте.
