Documentation v0.1.7

Resource Endpoints

This page covers the four endpoints that change a stopped VM's vCPU, memory, disk, and node.

Every endpoint requires a stopped VM, is subject to ALLOW_IPS and the disabled list, and runs on the VM's node via Multi-Node Dispatch.

Overview

Endpoint Field Validation qm command Response
POST /api/vm/:id/set/cpu cpu int required, 1–32 qm set --cores text ok
POST /api/vm/:id/set/memory memory int required, 512–32768 (MB) qm set --memory text ok
POST /api/vm/:id/set/disk disk string none qm disk resize scsi0 +<disk> text ok
POST /api/vm/:id/set/node node string required qm migrate --with-local-disks SSE

These limits are fixed in code and ignore VM_MAX_CPU / VM_MAX_RAM / VM_MAX_DISK.

vCPU

curl -X POST http://192.168.0.11:8080/api/vm/120/set/cpu \
  -H "Content-Type: application/json" -d '{"cpu": 4}'
# ok

Memory

curl -X POST http://192.168.0.11:8080/api/vm/120/set/memory \
  -H "Content-Type: application/json" -d '{"memory": 8192}'
# ok

With VM_BALLOON_MIN set and memory ≥ VM_BALLOON_MIN + 1024, the call also sends --numa 1 --balloon <memory − VM_BALLOON_MIN>. Below the threshold no --balloon is sent and the VM's existing balloon setting stays as is.

Disk

curl -X POST http://192.168.0.11:8080/api/vm/120/set/disk \
  -H "Content-Type: application/json" -d '{"disk": "16G"}'
# ok

disk is an increment: the example grows scsi0 by 16G. Proxmox cannot shrink disks; the value goes to qm as is, and a malformed value returns 500 with the qm output. Grow the partition and filesystem inside the VM yourself afterwards.

Node Migration

curl -N -X POST http://192.168.0.11:8080/api/vm/120/set/node \
  -H "Content-Type: application/json" -d '{"node": "pve2"}'

qm migrate output streams line by line over SSE with step set to migrating, followed by event: close. The target node's instruction set must cover the VM's CPU type; see CPU Baseline.

Error Responses

Case Response
Client IP not in ALLOW_IPS 403 (a single data: line for set/node)
VM running or on the disabled list 400 (a single data: line for set/node)
Field validation fails 400 invalid request body: ...
qm fails 500 (a data: error for set/node)
中文