Proxmox VE предоставляет полноценный REST API, через который доступны все операции — от создания VM до управления кластером. Это основа для интеграции с Terraform, Ansible, CI/CD и собственными скриптами.
Аутентификация: API-токен vs. Cookie
| Метод | Применение | Срок действия |
|---|---|---|
| API Token | Скрипты, автоматизация, CI/CD | Бессрочно (до отзыва) |
| Session Cookie | Веб-интерфейс, разовые запросы | 2 часа |
Создание API-токена
# Создать пользователя для автоматизации
pveum user add automation@pve --password AutoPass123
# Назначить права
pveum aclmod / --users automation@pve --roles PVEVMAdmin
# Создать API-токен (без привилегий суперпользователя)
pveum user token add automation@pve mytoken --privsep 0
# Вывод: automation@pve!mytoken = xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Примеры запросов через curl
TOKEN="automation@pve!mytoken=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
HOST="https://192.168.1.100:8006/api2/json"
# Список нод кластера
curl -s -k -H "Authorization: PVEAPIToken=$TOKEN" "$HOST/nodes" | python3 -m json.tool
# Список VM на ноде pve
curl -s -k -H "Authorization: PVEAPIToken=$TOKEN" "$HOST/nodes/pve/qemu"
# Запустить VM 100
curl -s -k -X POST -H "Authorization: PVEAPIToken=$TOKEN" "$HOST/nodes/pve/qemu/100/status/start"
# Остановить VM
curl -s -k -X POST -H "Authorization: PVEAPIToken=$TOKEN" "$HOST/nodes/pve/qemu/100/status/stop"
# Создать снапшот
curl -s -k -X POST -H "Authorization: PVEAPIToken=$TOKEN" -d "snapname=api-test&description=Created+via+API" "$HOST/nodes/pve/qemu/100/snapshot"
Python SDK для Proxmox
from proxmoxer import ProxmoxAPI
proxmox = ProxmoxAPI(
'192.168.1.100',
user='automation@pve',
token_name='mytoken',
token_value='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
verify_ssl=False
)
# Список всех VM
for vm in proxmox.nodes('pve').qemu.get():
print(f"VM {vm['vmid']}: {vm['name']} - {vm['status']}")
# Создать снапшот
proxmox.nodes('pve').qemu(100).snapshot.post(
snapname='python-snap',
description='Created via Python SDK'
)
# Запустить VM
proxmox.nodes('pve').qemu(100).status.start.post()
Установка SDK:
pip install proxmoxer requests. Официальная документация API доступна на вашем сервере: https://YOUR-PVE:8006/pve-docs/api-viewer/
Terraform провайдер Proxmox
terraform {
required_providers {
proxmox = {
source = "bpg/proxmox"
version = "~> 0.50"
}
}
}
provider "proxmox" {
endpoint = "https://192.168.1.100:8006/"
api_token = "automation@pve!mytoken=xxxxxxxx..."
insecure = true
}
resource "proxmox_virtual_environment_vm" "ubuntu" {
name = "tf-ubuntu"
node_name = "pve"
vm_id = 300
clone {
vm_id = 100 # ID шаблона
full = false
}
cpu { cores = 2 }
memory { dedicated = 2048 }
network_device {
bridge = "vmbr0"
model = "virtio"
}
}