proxmox: a Proxmox VE provider built from the provider contract #9

Merged
kacerr merged 13 commits from feat/proxmox-provider into main 2026-09-24 13:12:45 +02:00
56 changed files with 557 additions and 0 deletions
Showing only changes of commit ff94fe70bb - Show all commits
@@ -0,0 +1,282 @@
# Execution: proxmox, a Proxmox VE provider built from the provider contract
Pairs with [docs/plans/2026-09-18-1502-proxmox-provider.md](../plans/2026-09-18-1502-proxmox-provider.md).
## Status
- [x] Phase 0 — Plan file, branch, host recon, fixtures
- [ ] Phase 1 — The spec (`docs/proxmox-provider-spec.md`)
- [ ] Phase 2 — Config block, registration, package skeleton
- [ ] Phase 3 — Extract `nocloud` and `keyedlock` from kvm2
- [ ] Phase 4 — Seam, HTTP client, decorator, fake
- [ ] Phase 5 — Get, ListByTag, task helpers
- [ ] Phase 6 — Create
- [ ] Phase 7 — Delete, Checker, CRD comment
- [ ] Phase 8 — Contract and observability sweep, integration test, testing.md
- [ ] Phase 9 — Deployment and documentation
- [ ] Phase 10 — Review, real-host validation, changelog, MR
## Phase 0 — Plan file, branch, host recon, fixtures
The plan was committed alone on `main` on 2026-09-18 (`708989c`, then
`2167819` retargeting it at PVE 9.2). `origin/main` had not moved in the
meantime, so the branch was cut straight from local `main`:
```bash
git fetch -q origin && git rev-list --left-right --count origin/main...main # 0 2
git switch -c feat/proxmox-provider
```
The host is **pv1-1**, a single node (no cluster peers), `pve-manager/9.2.20`,
kernel `7.0.14-17-pve`, QEMU 11.0. The user prepared the token
(`~/.config/proxmox-token`, privsep off) and the CA (`~/.config/proxmox-ca.pem`)
before the session.
**TLS: 192.168.2.8 is not in the node certificate.** The first probe failed
with curl exit 60. The CA is right (`openssl s_client -CAfile` verifies the
chain), but the leaf's SANs are `127.0.0.1, ::1, localhost, 192.168.0.8,
pv1-1, pv1-1.home.lab`, and neither name resolves on the workstation.
192.168.0.8 and 192.168.2.8 present the same certificate fingerprint: the
node sits on `vmbr0` (192.168.0.8/24, untagged) with VLAN interfaces
`vmbr0.2` (192.168.2.8/24) and `vmbr0.4` (192.168.4.8/24). All recon kept
full verification by connecting to 192.168.2.8 while verifying the
certificate as `pv1-1.home.lab`:
```bash
curl -s --resolve pv1-1.home.lab:8006:192.168.2.8 --cacert ~/.config/proxmox-ca.pem \
-H @<(printf 'Authorization: PVEAPIToken=%s\n' "$(tr -d '[:space:]' < ~/.config/proxmox-token)") \
https://pv1-1.home.lab:8006/api2/json/version
# {"data":{"release":"9.2","version":"9.2.20","repoid":"49318c671b82f31e"}}
```
Every capture went through a scratch helper wrapping exactly that call. It
passes the token through a file descriptor so it never reaches argv or
output, and writes `{"status","reason","body"}` to
`internal/provider/proxmox/testdata/<name>.json`, refusing to save a body
that contains `PVEAPIToken`.
A real NoCloud seed was used instead of the plan's 1 KiB placeholder, so the
agent could be installed and F21 captured from a live guest. No ISO tool is
installed locally, so a throwaway module in the scratchpad reused the
repository's `github.com/kdomanski/iso9660 v0.4.0` from the module cache and
copied kvm2's `guestAgentScript` verbatim:
```bash
GOFLAGS=-mod=mod GOPROXY=off GOSUMDB=off go run . proxy-reconaaaaaaaaaaa proxy-reconaaaaaaaaaaa-seed.iso
# 45056 bytes, ISO 9660 'cidata'
```
Write experiments ran against VMID 199999 (`proxy-reconaaaaaaaaaaa`), a
clone of template 9001. Sequence: validation error; clone; resources, config
write and start while the clone lock was held; status and agent while
running bare; stop; config read; clone onto the taken VMID; tag tests;
upload twice plus a bad name; attach `ide2`, set cores and memory; three
resizes; start and agent poll; suspend and resume; a clone onto a storage
without image support; stop; destroy with `purge=1&destroy-unreferenced-disks=1`;
destroy again; ISO delete.
### Facts F1 to F23 (cited as Evidence by the spec)
- **F1.** Errors carry the text twice: in the HTTP reason phrase and as the
body's `message`, which ends in `\n`. A 400 adds `errors`, a map from
parameter to message. A 401 has the reason phrase only and an empty body.
The client should use the trimmed body `message` and fall back to the
reason phrase. Headers are ordinary CRLF.
- **F2.** Missing VM, identical for `GET config`, `GET status/current` and
`DELETE`: `500 Configuration file 'nodes/pv1-1/qemu-server/999999.conf' does not exist`.
- **F3.** A start issued while the VM is clone-locked is **accepted** (200
with a UPID). The task log reads `trying to acquire lock... OK` and the VM
starts once the clone finishes. Setting a lock through the API was not
tried.
- **F4.** Clone onto a taken VMID, synchronous:
`500 unable to create VM 199999: config file already exists`.
- **F5.** Agent enabled but not running: `500 QEMU guest agent is not running`.
Agent not enabled in the config: `500 No QEMU guest agent configured`.
Stopped VM with `agent: 1`: `500 VM 199999 is not running`.
- **F6.** Not produced. `local-lvm` is thin and overprovisions, so
`quota: absent`.
- **F7.** Config write while clone-locked: `500 VM is locked (clone)`.
- **F8.** `/cluster/resources?type=vm` entries carry `vmid, name, node,
status, type, template, tags, maxcpu, maxmem, maxdisk, uptime` and more;
`lock` appears only when set. Status values seen: `running`, `stopped`,
and `unknown` during a clone. **Mid-clone the entry has no `name`**: only
`type, vmid, id, node, lock: clone, status: unknown`.
- **F9.** Hyphenated tags are **accepted** and stored as given. Uppercase is
folded (`Proxy_Operator` → `proxy_operator`), the separator is `;`, and
characters such as a space or `!` give
`400 … tags: invalid format - invalid characters in tag`. The datacenter
has no `tag-style` or `user-tag-access` set.
- **F10.** `description` on clone is accepted and survives verbatim,
newlines included. The 22-character `proxy-<base32>` name is accepted.
- **F11.** The clone's `meta` is copied from the template
(`creation-qemu=11.0.3,ctime=1790145676`, identical to 9001), so it says
nothing about when the clone was made. `written-at-create` is required.
- **F12.** Upload: multipart with field `content=iso` and the file part named
`filename`, carrying the target file name. Returns a UPID for an
`imgcopy` task. A name without `.iso` gives
`400 … filename: wrong file extension`. **Re-uploading an existing name
silently overwrites it** (the task log shows a plain `cp`).
`Datastore.AllocateTemplate` suffices.
- **F13.** Deleting a volume needs `Datastore.Allocate` on
`/storage/<id>`; without it the call gives
`403 Permission check failed (/storage/local, Datastore.Allocate)`. With it
(on `proxy-seeds`), the delete **runs as an `imgdel` task** and returns a
UPID. Deleting a volume that no longer exists is also accepted and its
task still ends `OK`; the log reads `disk image '…' does not exist`, then
`Removed volume`. Seed cleanup is idempotent with no message matching.
- **F14.** Stopped: `status: stopped, qmpstatus: stopped`. Paused:
`status: running, qmpstatus: paused` in `status/current`, while
`/cluster/resources` shows plain `running`.
- **F15.** A clone onto a storage without image support is rejected up
front (`400 … storage 'local' does not support vm images`) and leaves no
VM. A clone failing mid-task was not observed.
- **F16.** Task status fields: `status` (`running`, `stopped`), `exitstatus`
(`OK` or the error text), `type, id, node, user, tokenid, upid, starttime,
pid, pstart`. A full clone of the 3 GiB template onto `local-lvm` finished
within about two seconds.
- **F17.** The planned role, granted on `/`, covered clone, config, resize,
start, stop, suspend, agent read, upload and destroy. **Missing:
`Datastore.Allocate` for deleting the seed ISO.** `VM.Config.Cloudinit` is
not needed for the `ide2` write. `SDN.Use` was held but never exercised,
because no call rewrote `net0`.
- **F18.** HTTP/1.1 only: `curl --http2` negotiates `HTTP/1.1`.
- **F19.** Template 9001 (`debian-13-template`): `scsi0` on `local-lvm`,
`boot: order=scsi0`, `ide2` free, `agent: 1`, OVMF, q35, `net0` untagged on
`vmbr0`. **Attaching `ide2` makes Proxmox append it to the boot order**
(`order=scsi0;ide2`). Template 9000 (Ubuntu) is unsuitable: it has a
Proxmox cloud-init drive on `ide2` and VLAN tag 4 on `net0`.
- **F20.** Resize **runs as a task** (returns a UPID). The same size is an
`OK` no-op; shrinking fails inside the task with `exitstatus`
`shrinking disks is not supported`.
- **F21.** Agent response: `result[]` of `{name, ip-addresses[{ip-address,
ip-address-type}]}`. The live guest reported `lo` and `ens18` with
`192.168.0.150`, 50 seconds after start, via DHCP on untagged `vmbr0`.
This proves the NoCloud-seed-on-`ide2` route end to end on this host.
- **F22.** A wrong secret and an unknown token id both give
`401 Authentication failed!`; no credentials gives `401 No ticket`.
- **F23.** Uploads are staged in `/var/tmp/pveupload-*` and then copied to
`/var/lib/vz/template/iso/`, so the tmpfs `/tmp` is not involved.
### Corrections to the plan that Phase 1 must fold into the spec
1. **Check `lock` before the name.** A mid-clone VM has no name in
`/cluster/resources` (F8), so name-first logic turns a clone in progress
into NotFound. Get, Delete and Create's lookup must treat a locked or
nameless entry at our VMID as in-progress (Transient or wait), never
absent.
2. **Inspect a taken VMID before probing forward.** After a crash mid-clone,
the retry's name lookup misses the nameless VM, the clone onto the
deterministic VMID fails with F4, and forward probing would clone a
duplicate. On F4, read that VMID: `lock: clone` means wait for it, and our
UID in the description means adopt it. Probe forward only for a VM that
is demonstrably someone else's.
3. **A start queues behind a lock** instead of failing (F3).
4. **Resize is asynchronous** (F20); wait on its task.
5. **Drop delete-before-upload** for the seed: upload overwrites (F12).
**Seed deletion is a task** (F13): wait on it. A repeat delete succeeds,
so Delete needs no absent-volume matcher.
6. **Get reads `status/current`**, not only `/cluster/resources`, to tell
paused from running (F14).
7. **Tag rationale**: hyphens are accepted on 9.2.20 (F9). `proxy_operator`
stays, since it is valid everywhere, but the claim that hyphens are
rejected is removed.
8. **The boot-disk logic must skip `ide2`**, which Proxmox adds to the boot
order (F19). The plan's rule already excludes it; add a test with
`order=scsi0;ide2`.
9. **Three agent messages, not one** (F5): `QEMU guest agent is not running`
(booting, or the install failed), `No QEMU guest agent configured` (our
`agent=1` was removed), and `VM <vmid> is not running` (stopped between
the status read and the agent call). The spec decides each class; none
may become NotFound.
10. **Internet on the proxy network is a hard prerequisite**, twice over: the
vendor-data agent install needs a package mirror, and the proxy itself
needs egress. The guide says so, and recommends baking
`qemu-guest-agent` into the template with `installGuestAgent: false` to
drop the mirror dependency from IP discovery.
### Decisions made with the user in Phase 0
- **Seeds go to a dedicated directory storage**, `proxy-seeds`, with ISO
content only. The token gets `Datastore.Allocate` there and nowhere else,
so it can delete seeds but never backups or other ISOs on `local`. The
sample config's `isoStorage` becomes `proxy-seeds`. The guide must say that
an ACL on a more specific path replaces the inherited one for that user,
so the role granted on `/storage/proxy-seeds` must repeat
`Datastore.AllocateTemplate`, `AllocateSpace` and `Audit` alongside
`Allocate`.
- **Proxies land on a VLAN** set in config. `ProxmoxConfig` gains an
optional `vlanTag` (1 to 4094), applied when Create rewrites `net0`
together with the optional bridge override, keeping the MAC. Unset leaves
`net0` as cloned. This is the first call that exercises `SDN.Use` (F17).
- **The API URL is `https://192.168.0.8:8006`**, the address in the node
certificate, so `caFile` verifies with no provider change. No
`tlsServerName` option. The operator's cluster must be able to reach
192.168.0.x.
### Seed storage and VLAN 4
The user created `proxy-seeds` (`dir`, ISO content only), granted the token
`Datastore.Allocate`, `AllocateSpace`, `AllocateTemplate` and `Audit` on
`/storage/proxy-seeds` through a role `ProxyOperatorSeeds`, and freed the
leftover recon ISO on `local`. An upload to `proxy-seeds` and two deletes of
a throwaway ISO there produced `content_delete_response.json`,
`content_delete_again_response.json` and `task_status_volume_missing.json`.
The user gave the VLAN as "vlan 4, bridge: vmbr0.4@vmbr0". That is the
host's own VLAN interface name as `ip link` prints it; a VM NIC cannot
attach to it because it is not a bridge. On the VLAN-aware `vmbr0` the
Proxmox form is `bridge=vmbr0,tag=4`, which is what template 9000 uses, so
the provider's `vlanTag: 4` appends `tag=4` to the cloned `net0`.
A second clone of 9001 at VMID 199999 got its seed from `proxy-seeds` and
`net0` rewritten from `virtio=BC:24:11:EE:48:83,bridge=vmbr0` to
`virtio=BC:24:11:EE:48:83,bridge=vmbr0,tag=4`. **The write succeeded, so the
token's `SDN.Use` on `/` covers a VLAN tag on `vmbr0`**
(`set_config_vlan_response.json`).
**The first VLAN 4 attempt never produced an agent** in seven minutes of
polling (every 13 seconds, 33 polls). The only signal was the agent call, so
the cause could not be seen from the API. A debug seed added a `recon` user
(user-data only, with a new instance id so cloud-init re-ran), and the user
logged in on the console: DHCP worked, but VLAN 4 had no route to the
internet because of a routing misconfiguration on the Proxmox host, so the
vendor-data `apt-get install qemu-guest-agent` could not run. The user fixed
the routing.
**Rerun from scratch after the fix**, same sequence the provider will use
(destroy and seed delete first, then a fresh clone and seed, `instance-id`
equal to the name):
| Step | Elapsed |
|---|---|
| clone task done | 4 s |
| seed upload task done | 4 s |
| config (`ide2`, `net0` with `tag=4`, tag) | 4 s |
| start task done | 5 s |
| agent reports `192.168.4.147` | 47 s after start |
The guest was reachable from the workstation (ping, TCP 22), as the contract
requires of a proxy address. Stopping it gave the F5 stopped-VM fixture;
destroy and seed delete then left the host with only its original VMs 100,
9000 and 9001, no ISOs on `local` or `proxy-seeds`, and no `local-lvm`
volumes of 199999. The capture is `agent_network_get_interfaces_vlan.json`.
### Worth noting
- The token file is mode 664; 600 would be tighter.
- Fixtures: 48 files, all valid JSON, none containing `PVEAPIToken`.
Several names differ from the plan's list because what they captured
differed from what was expected: `start_while_clone_locked_response.json`
(the start succeeded), `task_status_stopped_error.json` (from the shrink,
not a start), `upload_overwrite_response.json` (success, not an error),
`resize_same_size_response.json` and `resize_shrink_response.json`
(UPIDs), `err_forbidden_volume_delete.json` (the 403 from F13).
`err_no_space.json` was not produced (F6).
- The host is back to its original state; see the table above.
- The scratch seed builder (`seedgen` in the session scratchpad) took the
user-data file and instance id as arguments by the end, for the debug
login. It is not part of the repository; Phase 3's `nocloud` package
replaces it.
- Time to IP was about 50 s on both networks, with the agent installed at
first boot. Budgets in the plan (running wait 60 s for the VM state, the
agent discovered by `Get` polling) are consistent with this.
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":{\"result\":[{\"statistics\":{\"tx-errs\":0,\"rx-dropped\":0,\"rx-bytes\":7101,\"rx-packets\":86,\"rx-errs\":0,\"tx-dropped\":0,\"tx-packets\":86,\"tx-bytes\":7101},\"name\":\"lo\",\"ip-addresses\":[{\"ip-address\":\"127.0.0.1\",\"ip-address-type\":\"ipv4\",\"prefix\":8},{\"ip-address\":\"::1\",\"ip-address-type\":\"ipv6\",\"prefix\":128}],\"hardware-address\":\"00:00:00:00:00:00\"},{\"hardware-address\":\"bc:24:11:48:11:46\",\"ip-addresses\":[{\"ip-address\":\"192.168.0.150\",\"ip-address-type\":\"ipv4\",\"prefix\":24},{\"ip-address\":\"fe80::be24:11ff:fe48:1146\",\"ip-address-type\":\"ipv6\",\"prefix\":64}],\"name\":\"ens18\",\"statistics\":{\"rx-dropped\":0,\"rx-bytes\":29688403,\"rx-packets\":6744,\"tx-errs\":0,\"tx-bytes\":221044,\"tx-dropped\":0,\"tx-packets\":2970,\"rx-errs\":0}}]}}"
}
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":{\"result\":[{\"ip-addresses\":[{\"prefix\":8,\"ip-address-type\":\"ipv4\",\"ip-address\":\"127.0.0.1\"},{\"prefix\":128,\"ip-address-type\":\"ipv6\",\"ip-address\":\"::1\"}],\"hardware-address\":\"00:00:00:00:00:00\",\"statistics\":{\"tx-errs\":0,\"rx-packets\":86,\"rx-bytes\":7101,\"rx-dropped\":0,\"rx-errs\":0,\"tx-dropped\":0,\"tx-packets\":86,\"tx-bytes\":7101},\"name\":\"lo\"},{\"ip-addresses\":[{\"ip-address-type\":\"ipv4\",\"ip-address\":\"192.168.4.147\",\"prefix\":24},{\"ip-address\":\"fe80::be24:11ff:fea9:b4eb\",\"ip-address-type\":\"ipv6\",\"prefix\":64}],\"hardware-address\":\"bc:24:11:a9:b4:eb\",\"statistics\":{\"rx-errs\":0,\"tx-bytes\":319460,\"tx-dropped\":0,\"tx-packets\":4544,\"tx-errs\":0,\"rx-bytes\":29576554,\"rx-dropped\":0,\"rx-packets\":6027},\"name\":\"ens18\"}]}}"
}
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":\"UPID:pv1-1:0010F9DC:02801DA1:6AB37871:qmclone:9001:proxy-operator@pve!operator:\"}"
}
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":[{\"maxmem\":2147483648,\"netin\":0,\"uptime\":0,\"disk\":0,\"netout\":0,\"mem\":0,\"maxdisk\":34359738368,\"maxcpu\":2,\"type\":\"qemu\",\"memhost\":0,\"template\":0,\"id\":\"qemu/100\",\"cpu\":0,\"name\":\"ubuntu-vm-1\",\"vmid\":100,\"status\":\"stopped\",\"diskwrite\":0,\"diskread\":0,\"node\":\"pv1-1\"},{\"node\":\"pv1-1\",\"diskread\":0,\"diskwrite\":0,\"status\":\"stopped\",\"vmid\":9000,\"cpu\":0,\"name\":\"ubuntu-2604-template\",\"template\":1,\"id\":\"qemu/9000\",\"memhost\":0,\"type\":\"qemu\",\"maxcpu\":2,\"maxdisk\":34359738368,\"mem\":0,\"disk\":0,\"netout\":0,\"uptime\":0,\"netin\":0,\"maxmem\":2147483648},{\"uptime\":0,\"netout\":0,\"disk\":0,\"netin\":0,\"maxmem\":2147483648,\"maxdisk\":3221225472,\"mem\":0,\"id\":\"qemu/9001\",\"template\":1,\"name\":\"debian-13-template\",\"cpu\":0,\"type\":\"qemu\",\"maxcpu\":2,\"memhost\":0,\"diskwrite\":0,\"diskread\":0,\"node\":\"pv1-1\",\"vmid\":9001,\"status\":\"stopped\"}]}"
}
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":[{\"template\":0,\"id\":\"qemu/100\",\"cpu\":0,\"name\":\"ubuntu-vm-1\",\"type\":\"qemu\",\"maxcpu\":2,\"memhost\":0,\"diskread\":0,\"diskwrite\":0,\"node\":\"pv1-1\",\"vmid\":100,\"status\":\"stopped\",\"uptime\":0,\"disk\":0,\"netout\":0,\"netin\":0,\"maxmem\":2147483648,\"maxdisk\":34359738368,\"mem\":0},{\"type\":\"qemu\",\"vmid\":199999,\"lock\":\"clone\",\"status\":\"unknown\",\"id\":\"qemu/199999\",\"node\":\"pv1-1\"},{\"diskwrite\":0,\"diskread\":0,\"node\":\"pv1-1\",\"vmid\":9000,\"status\":\"stopped\",\"id\":\"qemu/9000\",\"template\":1,\"name\":\"ubuntu-2604-template\",\"cpu\":0,\"maxcpu\":2,\"type\":\"qemu\",\"memhost\":0,\"maxdisk\":34359738368,\"mem\":0,\"uptime\":0,\"netout\":0,\"disk\":0,\"netin\":0,\"maxmem\":2147483648},{\"type\":\"qemu\",\"maxcpu\":2,\"memhost\":0,\"template\":1,\"id\":\"qemu/9001\",\"cpu\":0,\"name\":\"debian-13-template\",\"vmid\":9001,\"status\":\"stopped\",\"diskwrite\":0,\"diskread\":0,\"node\":\"pv1-1\",\"netin\":0,\"maxmem\":2147483648,\"uptime\":0,\"disk\":0,\"netout\":0,\"mem\":0,\"maxdisk\":3221225472}]}"
}
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":[{\"id\":\"qemu/100\",\"template\":0,\"name\":\"ubuntu-vm-1\",\"cpu\":0,\"type\":\"qemu\",\"maxcpu\":2,\"memhost\":0,\"diskwrite\":0,\"diskread\":0,\"node\":\"pv1-1\",\"vmid\":100,\"status\":\"stopped\",\"uptime\":0,\"netout\":0,\"disk\":0,\"maxmem\":2147483648,\"netin\":0,\"maxdisk\":34359738368,\"mem\":0},{\"tags\":\"proxy_operator\",\"mem\":0,\"maxdisk\":4294967296,\"netin\":0,\"maxmem\":1073741824,\"uptime\":0,\"netout\":0,\"disk\":0,\"vmid\":199999,\"status\":\"stopped\",\"diskread\":0,\"diskwrite\":0,\"node\":\"pv1-1\",\"maxcpu\":1,\"type\":\"qemu\",\"memhost\":0,\"id\":\"qemu/199999\",\"template\":0,\"name\":\"proxy-reconaaaaaaaaaaa\",\"cpu\":0},{\"uptime\":0,\"netout\":0,\"disk\":0,\"netin\":0,\"maxmem\":2147483648,\"maxdisk\":34359738368,\"mem\":0,\"id\":\"qemu/9000\",\"template\":1,\"name\":\"ubuntu-2604-template\",\"cpu\":0,\"maxcpu\":2,\"type\":\"qemu\",\"memhost\":0,\"diskwrite\":0,\"diskread\":0,\"node\":\"pv1-1\",\"vmid\":9000,\"status\":\"stopped\"},{\"mem\":0,\"maxdisk\":3221225472,\"maxmem\":2147483648,\"netin\":0,\"uptime\":0,\"disk\":0,\"netout\":0,\"vmid\":9001,\"status\":\"stopped\",\"diskwrite\":0,\"diskread\":0,\"node\":\"pv1-1\",\"maxcpu\":2,\"type\":\"qemu\",\"memhost\":0,\"template\":1,\"id\":\"qemu/9001\",\"cpu\":0,\"name\":\"debian-13-template\"}]}"
}
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":{\"meta\":\"creation-qemu=11.0.3,ctime=1790145676\",\"description\":\"proxy-operator-managed=true\\nproxy-operator-uid=00000000-0000-0000-0000-00000000recon\\nproxy-operator-created-at=2026-09-23T07:00:00Z\",\"ide2\":\"local:iso/proxy-reconaaaaaaaaaaa-seed.iso,media=cdrom,size=44K\",\"cores\":1,\"memory\":\"1024\",\"scsihw\":\"virtio-scsi-pci\",\"net0\":\"virtio=BC:24:11:48:11:46,bridge=vmbr0\",\"efidisk0\":\"local-lvm:vm-199999-disk-0,efitype=4m,pre-enrolled-keys=0,size=4M\",\"scsi0\":\"local-lvm:vm-199999-disk-1,size=4G\",\"boot\":\"order=scsi0;ide2\",\"vmgenid\":\"2dd339a4-d7fb-4d47-96fd-5a61a25f808d\",\"digest\":\"98a4fff988b5508a7e1f6aa77c34768812d2382c\",\"name\":\"proxy-reconaaaaaaaaaaa\",\"vga\":\"serial0\",\"serial0\":\"socket\",\"smbios1\":\"uuid=f2ade202-ffdb-4a89-9867-3d419384471d\",\"machine\":\"q35\",\"bios\":\"ovmf\",\"tags\":\"proxy_operator\",\"agent\":\"1\",\"ostype\":\"l26\"}}"
}
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":\"UPID:pv1-1:00111FF7:02853E62:6AB38591:imgdel:proxy-seeds:proxy-operator@pve!operator:\"}"
}
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":\"UPID:pv1-1:00111FF3:02853D30:6AB3858E:imgdel:proxy-seeds:proxy-operator@pve!operator:\"}"
}
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":\"UPID:pv1-1:00110564:0281A657:6AB37C5E:qmdestroy:199999:proxy-operator@pve!operator:\"}"
}
@@ -0,0 +1,5 @@
{
"status": 500,
"reason": "QEMU guest agent is not running",
"body": "{\"message\":\"QEMU guest agent is not running\\n\",\"data\":null}"
}
@@ -0,0 +1,5 @@
{
"status": 500,
"reason": "No QEMU guest agent configured",
"body": "{\"message\":\"No QEMU guest agent configured\\n\",\"data\":null}"
}
@@ -0,0 +1,5 @@
{
"status": 500,
"reason": "VM 199999 is not running",
"body": "{\"message\":\"VM 199999 is not running\\n\",\"data\":null}"
}
+5
View File
@@ -0,0 +1,5 @@
{
"status": 400,
"reason": "Parameter verification failed.",
"body": "{\"data\":null,\"message\":\"Parameter verification failed.\\n\",\"errors\":{\"newid\":\"type check ('integer') failed - got 'abc'\"}}"
}
@@ -0,0 +1,5 @@
{
"status": 400,
"reason": "Parameter verification failed.",
"body": "{\"errors\":{\"storage\":\"storage 'local' does not support vm images\"},\"message\":\"Parameter verification failed.\\n\",\"data\":null}"
}
@@ -0,0 +1,5 @@
{
"status": 500,
"reason": "VM is locked (clone)",
"body": "{\"data\":null,\"message\":\"VM is locked (clone)\\n\"}"
}
@@ -0,0 +1,5 @@
{
"status": 500,
"reason": "Configuration file 'nodes/pv1-1/qemu-server/199999.conf' does not exist",
"body": "{\"data\":null,\"message\":\"Configuration file 'nodes/pv1-1/qemu-server/199999.conf' does not exist\\n\"}"
}
+5
View File
@@ -0,0 +1,5 @@
{
"status": 403,
"reason": "Permission check failed (/nodes/pv1-1, Sys.Syslog)",
"body": "{\"message\":\"Permission check failed (/nodes/pv1-1, Sys.Syslog)\\n\",\"data\":null}"
}
@@ -0,0 +1,5 @@
{
"status": 403,
"reason": "Permission check failed (/storage/local, Datastore.Allocate)",
"body": "{\"data\":null,\"message\":\"Permission check failed (/storage/local, Datastore.Allocate)\\n\"}"
}
@@ -0,0 +1,5 @@
{
"status": 500,
"reason": "unable to create VM 199999: config file already exists",
"body": "{\"data\":null,\"message\":\"unable to create VM 199999: config file already exists\\n\"}"
}
@@ -0,0 +1,5 @@
{
"status": 401,
"reason": "No ticket",
"body": ""
}
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":null}"
}
@@ -0,0 +1,5 @@
{
"status": 400,
"reason": "Parameter verification failed.",
"body": "{\"errors\":{\"tags\":\"invalid format - invalid characters in tag\\n\"},\"data\":null,\"message\":\"Parameter verification failed.\\n\"}"
}
@@ -0,0 +1,5 @@
{
"status": 401,
"reason": "Authentication failed!",
"body": ""
}
@@ -0,0 +1,5 @@
{
"status": 401,
"reason": "Authentication failed!",
"body": ""
}
@@ -0,0 +1,5 @@
{
"status": 400,
"reason": "Parameter verification failed.",
"body": "{\"message\":\"Parameter verification failed.\\n\",\"data\":null,\"errors\":{\"filename\":\"wrong file extension\"}}"
}
@@ -0,0 +1,5 @@
{
"status": 500,
"reason": "Configuration file 'nodes/pv1-1/qemu-server/999999.conf' does not exist",
"body": "{\"message\":\"Configuration file 'nodes/pv1-1/qemu-server/999999.conf' does not exist\\n\",\"data\":null}"
}
@@ -0,0 +1,5 @@
{
"status": 500,
"reason": "Configuration file 'nodes/pv1-1/qemu-server/999999.conf' does not exist",
"body": "{\"data\":null,\"message\":\"Configuration file 'nodes/pv1-1/qemu-server/999999.conf' does not exist\\n\"}"
}
+5
View File
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":{\"rootfs\":{\"total\":100861726720,\"avail\":88717860864,\"used\":6973128704,\"free\":93888598016},\"pveversion\":\"pve-manager/9.2.20/49318c671b82f31e\",\"current-kernel\":{\"machine\":\"x86_64\",\"sysname\":\"Linux\",\"release\":\"7.0.14-17-pve\",\"version\":\"#1 SMP PREEMPT_DYNAMIC PMX 7.0.14-17 (2026-09-10T10:16Z)\"},\"cpu\":0,\"cpuinfo\":{\"mhz\":\"1100.947\",\"user_hz\":100,\"cpus\":16,\"sockets\":1,\"model\":\"AMD Ryzen 9 PRO 8945HS w/ Radeon 780M Graphics\",\"vendor\":\"AuthenticAMD\",\"family\":\"25\",\"hvm\":\"1\",\"flags\":\"fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good amd_lbr_v2 nopl xtopology nonstop_tsc cpuid extd_apicid aperfmperf rapl pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt tce topoext perfctr_core perfctr_nb bpext perfctr_llc mwaitx cpuid_fault cpb cat_l3 cdp_l3 hw_pstate ssbd mba perfmon_v2 ibrs ibpb stibp ibrs_enhanced vmmcall fsgsbase bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local user_shstk avx512_bf16 clzero irperf xsaveerptr rdpru wbnoinvd cppc arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold vgif x2avic v_spec_ctrl vnmi avx512vbmi umip pku ospke avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq rdpid overflow_recov succor smca fsrm flush_l1d amd_lbr_pmc_freeze\",\"cores\":8},\"kversion\":\"Linux 7.0.14-17-pve #1 SMP PREEMPT_DYNAMIC PMX 7.0.14-17 (2026-09-10T10:16Z)\",\"wait\":0,\"boot-info\":{\"mode\":\"efi\",\"secureboot\":1},\"loadavg\":[\"0.05\",\"0.12\",\"0.10\"],\"memory\":{\"used\":2054795264,\"available\":29252005888,\"total\":31306801152,\"free\":28277043200},\"idle\":0,\"uptime\":419233,\"swap\":{\"used\":0,\"total\":8589930496,\"free\":8589930496},\"ksm\":{\"shared\":0}}}"
}
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":\"UPID:pv1-1:0010FB74:02804090:6AB378CA:resize:199999:proxy-operator@pve!operator:\"}"
}
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":\"UPID:pv1-1:0010FB6F:02804085:6AB378CA:resize:199999:proxy-operator@pve!operator:\"}"
}
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":\"UPID:pv1-1:0010FB72:0280408B:6AB378CA:resize:199999:proxy-operator@pve!operator:\"}"
}
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":null}"
}
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":null}"
}
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":\"UPID:pv1-1:0010FBF1:02804D0D:6AB378EA:qmstart:199999:proxy-operator@pve!operator:\"}"
}
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":\"UPID:pv1-1:0010F9F0:02801DAF:6AB37871:qmstart:199999:proxy-operator@pve!operator:\"}"
}
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":{\"serial\":1,\"proxmox-support\":{\"pbs-dirty-bitmap-migration\":true,\"query-bitmap-info\":true,\"backup-fleecing\":true,\"pbs-masterkey\":true,\"pbs-dirty-bitmap-savevm\":true,\"backup-max-workers\":true,\"backup-access-api\":true,\"pbs-dirty-bitmap\":true,\"pbs-library-version\":\"2.0.3 (UNKNOWN)\"},\"maxdisk\":4294967296,\"vmid\":199999,\"ha\":{\"managed\":0},\"diskwrite\":373281280,\"uptime\":858,\"ballooninfo\":{\"mem_swapped_out\":0,\"mem_swapped_in\":0,\"max_mem\":1073741824,\"minor_page_faults\":266583,\"actual\":1073741824,\"last_update\":1790147647,\"major_page_faults\":599,\"free_mem\":414076928,\"total_mem\":943988736},\"running-qemu\":\"11.0.3\",\"disk\":0,\"cpus\":1,\"name\":\"proxy-reconaaaaaaaaaaa\",\"blockstat\":{\"ide2\":{\"rd_merged\":0,\"wr_total_time_ns\":0,\"failed_flush_operations\":0,\"account_failed\":true,\"account_invalid\":true,\"failed_wr_operations\":0,\"unmap_bytes\":0,\"invalid_rd_operations\":0,\"wr_highest_offset\":0,\"failed_zone_append_operations\":0,\"wr_operations\":0,\"unmap_merged\":0,\"wr_bytes\":0,\"idle_time_ns\":847849524087,\"unmap_total_time_ns\":0,\"zone_append_total_time_ns\":0,\"wr_merged\":0,\"rd_total_time_ns\":1255768,\"zone_append_bytes\":0,\"zone_append_operations\":0,\"invalid_unmap_operations\":0,\"unmap_operations\":0,\"invalid_zone_append_operations\":0,\"invalid_wr_operations\":0,\"flush_operations\":0,\"rd_operations\":61,\"invalid_flush_operations\":0,\"zone_append_merged\":0,\"failed_unmap_operations\":0,\"failed_rd_operations\":0,\"flush_total_time_ns\":0,\"rd_bytes\":174304,\"timed_stats\":[]},\"efidisk0\":{\"wr_highest_offset\":15360,\"unmap_merged\":0,\"wr_operations\":0,\"failed_zone_append_operations\":0,\"wr_bytes\":0,\"rd_merged\":0,\"failed_flush_operations\":0,\"wr_total_time_ns\":0,\"account_invalid\":true,\"account_failed\":true,\"invalid_rd_operations\":0,\"unmap_bytes\":0,\"failed_wr_operations\":0,\"invalid_wr_operations\":0,\"invalid_zone_append_operations\":0,\"flush_operations\":0,\"invalid_flush_operations\":0,\"rd_operations\":0,\"failed_rd_operations\":0,\"zone_append_merged\":0,\"failed_unmap_operations\":0,\"timed_stats\":[],\"rd_bytes\":0,\"flush_total_time_ns\":0,\"wr_merged\":0,\"zone_append_total_time_ns\":0,\"unmap_total_time_ns\":0,\"rd_total_time_ns\":0,\"zone_append_operations\":0,\"zone_append_bytes\":0,\"unmap_operations\":0,\"invalid_unmap_operations\":0},\"scsi0\":{\"unmap_operations\":81,\"invalid_unmap_operations\":0,\"zone_append_bytes\":0,\"zone_append_operations\":0,\"rd_total_time_ns\":899575874,\"wr_merged\":0,\"zone_append_total_time_ns\":0,\"idle_time_ns\":18104802903,\"unmap_total_time_ns\":326592,\"timed_stats\":[],\"rd_bytes\":196229120,\"flush_total_time_ns\":47510703,\"failed_rd_operations\":0,\"failed_unmap_operations\":0,\"zone_append_merged\":0,\"invalid_flush_operations\":0,\"rd_operations\":8843,\"invalid_wr_operations\":0,\"flush_operations\":145,\"invalid_zone_append_operations\":0,\"invalid_rd_operations\":0,\"unmap_bytes\":100188160,\"failed_wr_operations\":0,\"account_invalid\":true,\"account_failed\":true,\"failed_flush_operations\":0,\"wr_total_time_ns\":4726294270,\"rd_merged\":0,\"wr_bytes\":373281280,\"unmap_merged\":0,\"wr_operations\":1449,\"failed_zone_append_operations\":0,\"wr_highest_offset\":4294967296},\"pflash0\":{\"unmap_operations\":0,\"invalid_unmap_operations\":0,\"zone_append_operations\":0,\"zone_append_bytes\":0,\"rd_total_time_ns\":0,\"wr_merged\":0,\"zone_append_total_time_ns\":0,\"unmap_total_time_ns\":0,\"timed_stats\":[],\"rd_bytes\":0,\"flush_total_time_ns\":0,\"failed_rd_operations\":0,\"failed_unmap_operations\":0,\"zone_append_merged\":0,\"invalid_flush_operations\":0,\"rd_operations\":0,\"flush_operations\":0,\"invalid_wr_operations\":0,\"invalid_zone_append_operations\":0,\"unmap_bytes\":0,\"invalid_rd_operations\":0,\"failed_wr_operations\":0,\"account_invalid\":true,\"account_failed\":true,\"failed_flush_operations\":0,\"wr_total_time_ns\":0,\"rd_merged\":0,\"wr_bytes\":0,\"unmap_merged\":0,\"failed_zone_append_operations\":0,\"wr_operations\":0,\"wr_highest_offset\":0}},\"agent\":1,\"pid\":1113088,\"tags\":\"proxy_operator\",\"pressureiosome\":0,\"diskread\":196403424,\"pressurememoryfull\":0,\"nics\":{\"tap199999i0\":{\"netin\":30673586,\"netout\":240050}},\"qmpstatus\":\"paused\",\"status\":\"running\",\"netin\":30673586,\"balloon\":1073741824,\"netout\":240050,\"cpu\":0,\"clipboard\":null,\"pressurememorysome\":0,\"pressurecpufull\":0,\"running-machine\":\"pc-q35-11.0+pve0\",\"mem\":529911808,\"pressurecpusome\":0,\"freemem\":414076928,\"maxmem\":1073741824,\"pressureiofull\":0,\"memhost\":674607104}}"
}
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":{\"running-machine\":\"pc-q35-11.0+pve0\",\"mem\":190930944,\"pressurecpufull\":0,\"pressurememorysome\":0,\"pressureiofull\":0,\"memhost\":337240064,\"pressurecpusome\":0,\"maxmem\":2147483648,\"freemem\":1808162816,\"pressurememoryfull\":0,\"nics\":{\"tap199999i0\":{\"netout\":0,\"netin\":255}},\"diskread\":148379648,\"clipboard\":null,\"status\":\"running\",\"qmpstatus\":\"running\",\"netin\":255,\"balloon\":2147483648,\"netout\":0,\"cpu\":0,\"agent\":1,\"pid\":1112650,\"name\":\"proxy-reconaaaaaaaaaaa\",\"blockstat\":{\"scsi0\":{\"zone_append_operations\":0,\"zone_append_bytes\":0,\"invalid_unmap_operations\":0,\"unmap_operations\":6,\"idle_time_ns\":4599584011,\"unmap_total_time_ns\":24404,\"zone_append_total_time_ns\":0,\"wr_merged\":0,\"rd_total_time_ns\":466322772,\"zone_append_merged\":0,\"failed_unmap_operations\":0,\"failed_rd_operations\":0,\"flush_total_time_ns\":4612531,\"rd_bytes\":148379648,\"timed_stats\":[],\"flush_operations\":19,\"invalid_wr_operations\":0,\"invalid_zone_append_operations\":0,\"rd_operations\":4279,\"invalid_flush_operations\":0,\"account_failed\":true,\"account_invalid\":true,\"failed_wr_operations\":0,\"invalid_rd_operations\":0,\"unmap_bytes\":282624,\"rd_merged\":0,\"wr_total_time_ns\":190079426,\"failed_flush_operations\":0,\"wr_bytes\":6373888,\"wr_highest_offset\":1533730816,\"failed_zone_append_operations\":0,\"wr_operations\":220,\"unmap_merged\":0},\"efidisk0\":{\"rd_merged\":0,\"failed_flush_operations\":0,\"wr_total_time_ns\":0,\"account_invalid\":true,\"account_failed\":true,\"unmap_bytes\":0,\"invalid_rd_operations\":0,\"failed_wr_operations\":0,\"wr_highest_offset\":9216,\"unmap_merged\":0,\"failed_zone_append_operations\":0,\"wr_operations\":0,\"wr_bytes\":0,\"wr_merged\":0,\"zone_append_total_time_ns\":0,\"unmap_total_time_ns\":0,\"rd_total_time_ns\":0,\"zone_append_bytes\":0,\"zone_append_operations\":0,\"unmap_operations\":0,\"invalid_unmap_operations\":0,\"invalid_wr_operations\":0,\"invalid_zone_append_operations\":0,\"flush_operations\":0,\"invalid_flush_operations\":0,\"rd_operations\":0,\"failed_rd_operations\":0,\"zone_append_merged\":0,\"failed_unmap_operations\":0,\"timed_stats\":[],\"rd_bytes\":0,\"flush_total_time_ns\":0},\"pflash0\":{\"wr_total_time_ns\":0,\"failed_flush_operations\":0,\"rd_merged\":0,\"failed_wr_operations\":0,\"unmap_bytes\":0,\"invalid_rd_operations\":0,\"account_failed\":true,\"account_invalid\":true,\"wr_operations\":0,\"failed_zone_append_operations\":0,\"unmap_merged\":0,\"wr_highest_offset\":0,\"wr_bytes\":0,\"rd_total_time_ns\":0,\"unmap_total_time_ns\":0,\"zone_append_total_time_ns\":0,\"wr_merged\":0,\"invalid_unmap_operations\":0,\"unmap_operations\":0,\"zone_append_operations\":0,\"zone_append_bytes\":0,\"rd_operations\":0,\"invalid_flush_operations\":0,\"invalid_zone_append_operations\":0,\"invalid_wr_operations\":0,\"flush_operations\":0,\"flush_total_time_ns\":0,\"rd_bytes\":0,\"timed_stats\":[],\"failed_unmap_operations\":0,\"zone_append_merged\":0,\"failed_rd_operations\":0}},\"pressureiosome\":0.01,\"vmid\":199999,\"ha\":{\"managed\":0},\"diskwrite\":6373888,\"serial\":1,\"proxmox-support\":{\"pbs-dirty-bitmap-savevm\":true,\"pbs-masterkey\":true,\"backup-fleecing\":true,\"pbs-dirty-bitmap-migration\":true,\"query-bitmap-info\":true,\"backup-access-api\":true,\"pbs-dirty-bitmap\":true,\"pbs-library-version\":\"2.0.3 (UNKNOWN)\",\"backup-max-workers\":true},\"maxdisk\":3221225472,\"ballooninfo\":{\"actual\":2147483648,\"mem_swapped_out\":0,\"mem_swapped_in\":0,\"max_mem\":2147483648,\"minor_page_faults\":122998,\"major_page_faults\":616,\"free_mem\":1808162816,\"total_mem\":1999093760,\"last_update\":1790146701},\"uptime\":26,\"running-qemu\":\"11.0.3\",\"disk\":0,\"cpus\":2}}"
}
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":{\"name\":\"ubuntu-vm-1\",\"mem\":0,\"maxmem\":2147483648,\"memhost\":0,\"maxdisk\":34359738368,\"serial\":1,\"ha\":{\"managed\":0},\"vmid\":100,\"cpu\":0,\"cpus\":2,\"netout\":0,\"disk\":0,\"qmpstatus\":\"stopped\",\"status\":\"stopped\",\"netin\":0,\"uptime\":0,\"clipboard\":null}}"
}
+5
View File
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":\"UPID:pv1-1:0010FAC5:02802A52:6AB37891:qmstop:199999:proxy-operator@pve!operator:\"}"
}
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":[{\"size\":45056,\"volid\":\"local:iso/proxy-reconaaaaaaaaaaa-seed.iso\",\"format\":\"iso\",\"content\":\"iso\",\"ctime\":1790146742}]}"
}
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":{\"total\":100861726720,\"active\":1,\"enabled\":1,\"used\":6973128704,\"avail\":88717860864,\"type\":\"dir\",\"shared\":0,\"content\":\"iso,import,backup,vztmpl\"}}"
}
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":{\"upid\":\"UPID:pv1-1:0010F9DC:02801DA1:6AB37871:qmclone:9001:proxy-operator@pve!operator:\",\"exitstatus\":\"OK\",\"status\":\"stopped\",\"pid\":1112540,\"pstart\":41950625,\"user\":\"proxy-operator@pve\",\"node\":\"pv1-1\",\"type\":\"qmclone\",\"starttime\":1790146673,\"id\":\"9001\",\"tokenid\":\"operator\"}}"
}
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":{\"pstart\":41962765,\"upid\":\"UPID:pv1-1:0010FBF1:02804D0D:6AB378EA:qmstart:199999:proxy-operator@pve!operator:\",\"pid\":1113073,\"node\":\"pv1-1\",\"user\":\"proxy-operator@pve\",\"type\":\"qmstart\",\"status\":\"running\",\"tokenid\":\"operator\",\"id\":\"199999\",\"starttime\":1790146794}}"
}
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":{\"exitstatus\":\"OK\",\"status\":\"stopped\",\"upid\":\"UPID:pv1-1:0010F9F0:02801DAF:6AB37871:qmstart:199999:proxy-operator@pve!operator:\",\"type\":\"qmstart\",\"tokenid\":\"operator\",\"id\":\"199999\",\"starttime\":1790146673,\"pstart\":41950639,\"pid\":1112560,\"node\":\"pv1-1\",\"user\":\"proxy-operator@pve\"}}"
}
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":{\"type\":\"resize\",\"tokenid\":\"operator\",\"id\":\"199999\",\"starttime\":1790146762,\"pstart\":41959563,\"pid\":1112946,\"user\":\"proxy-operator@pve\",\"node\":\"pv1-1\",\"exitstatus\":\"shrinking disks is not supported\",\"status\":\"stopped\",\"upid\":\"UPID:pv1-1:0010FB72:0280408B:6AB378CA:resize:199999:proxy-operator@pve!operator:\"}}"
}
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":{\"exitstatus\":\"OK\",\"status\":\"stopped\",\"upid\":\"UPID:pv1-1:0010FAC5:02802A52:6AB37891:qmstop:199999:proxy-operator@pve!operator:\",\"type\":\"qmstop\",\"starttime\":1790146705,\"id\":\"199999\",\"tokenid\":\"operator\",\"pid\":1112773,\"pstart\":41953874,\"user\":\"proxy-operator@pve\",\"node\":\"pv1-1\"}}"
}
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":{\"user\":\"proxy-operator@pve\",\"node\":\"pv1-1\",\"pstart\":42286690,\"pid\":1122295,\"id\":\"proxy-seeds\",\"tokenid\":\"operator\",\"starttime\":1790150033,\"type\":\"imgdel\",\"upid\":\"UPID:pv1-1:00111FF7:02853E62:6AB38591:imgdel:proxy-seeds:proxy-operator@pve!operator:\",\"status\":\"stopped\",\"exitstatus\":\"OK\"}}"
}
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":\"UPID:pv1-1:0010FB2D:028038B0:6AB378B6:imgcopy::proxy-operator@pve!operator:\"}"
}
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":\"UPID:pv1-1:0010FB27:0280377E:6AB378B3:imgcopy::proxy-operator@pve!operator:\"}"
}
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":\"UPID:pv1-1:00110D02:0282B09D:6AB37F08:imgcopy::proxy-operator@pve!operator:\"}"
}
+5
View File
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":{\"version\":\"9.2.20\",\"repoid\":\"49318c671b82f31e\",\"release\":\"9.2\"}}"
}
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":{\"boot\":\"order=scsi0\",\"vmgenid\":\"2dd339a4-d7fb-4d47-96fd-5a61a25f808d\",\"digest\":\"e747d94a5aac26cf6528b43835600b1bc4e82dda\",\"scsi0\":\"local-lvm:vm-199999-disk-1,size=3G\",\"serial0\":\"socket\",\"name\":\"proxy-reconaaaaaaaaaaa\",\"vga\":\"serial0\",\"cores\":2,\"meta\":\"creation-qemu=11.0.3,ctime=1790145676\",\"description\":\"proxy-operator-managed=true\\nproxy-operator-uid=00000000-0000-0000-0000-00000000recon\\nproxy-operator-created-at=2026-09-23T07:00:00Z\",\"efidisk0\":\"local-lvm:vm-199999-disk-0,efitype=4m,pre-enrolled-keys=0,size=4M\",\"memory\":\"2048\",\"scsihw\":\"virtio-scsi-pci\",\"net0\":\"virtio=BC:24:11:48:11:46,bridge=vmbr0\",\"agent\":\"1\",\"ostype\":\"l26\",\"bios\":\"ovmf\",\"machine\":\"q35\",\"smbios1\":\"uuid=f2ade202-ffdb-4a89-9867-3d419384471d\"}}"
}
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":{\"ostype\":\"l26\",\"agent\":\"1\",\"smbios1\":\"uuid=5b131064-9841-4bc7-982e-5fb5b2e677eb\",\"machine\":\"q35\",\"bios\":\"ovmf\",\"scsi0\":\"local-lvm:base-9001-disk-2,size=3G\",\"digest\":\"03bdc5d457ce2165bb633505d2ff0cd94340dbc2\",\"vmgenid\":\"9a42b153-7965-4601-864d-59fc2d71ecd4\",\"boot\":\"order=scsi0\",\"vga\":\"serial0\",\"template\":1,\"name\":\"debian-13-template\",\"serial0\":\"socket\",\"meta\":\"creation-qemu=11.0.3,ctime=1790145676\",\"cores\":2,\"net0\":\"virtio=BC:24:11:93:25:82,bridge=vmbr0\",\"scsihw\":\"virtio-scsi-pci\",\"memory\":\"2048\",\"efidisk0\":\"local-lvm:base-9001-disk-0,efitype=4m,pre-enrolled-keys=0,size=4M\"}}"
}
@@ -0,0 +1,5 @@
{
"status": 200,
"reason": "OK",
"body": "{\"data\":{\"ciuser\":\"ubuntu\",\"smbios1\":\"uuid=6ba36ff6-9d1f-457b-8cdc-a44448f5bd35\",\"ostype\":\"l26\",\"memory\":\"2048\",\"scsihw\":\"virtio-scsi-pci\",\"net0\":\"virtio=BC:24:11:2F:97:A0,bridge=vmbr0,tag=4\",\"ide2\":\"local-lvm:vm-9000-cloudinit,media=cdrom\",\"cores\":2,\"meta\":\"creation-qemu=11.0.0,ctime=1789719724\",\"ipconfig0\":\"ip=dhcp\",\"serial0\":\"socket\",\"name\":\"ubuntu-2604-template\",\"template\":1,\"vga\":\"serial0\",\"boot\":\"order=scsi0\",\"vmgenid\":\"37d16d5c-957f-4c83-aab3-b403513e466c\",\"digest\":\"8820e9bb34a576d0f54b94cfe3e69fbfdf13a8ce\",\"scsi0\":\"local-lvm:base-9000-disk-0,size=32G\"}}"
}