Proxmox REST API и автоматизация: управление через скрипты

Proxmox VE · 19.04.2026
Proxmox REST API и автоматизация: управление через скрипты

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"
  }
}
← Назад в базу знаний Задать вопрос поддержке