Skip to content

Proxmox VE

Status: available · package wg-flow-plugin-proxmox · provider proxmox · category virtualization.

The plugin queries the Proxmox VE API (GET /api2/json/cluster/resources) and sends nodes, VMs, containers, and storage into inventory. PVE credentials stay in the agent YAML.

The local UI form is built from the plugin schema:

Proxmox source settings: identity, interval, URL
Identity, schedule, URL
Proxmox source settings: token, TLS, Save settings
Authentication and TLS

Install

The agent must be connected to the API.

bash
docker compose exec agent wg-flow-agent plugin install proxmox
# or
wg-flow-agent plugin install proxmox

After install, open the local UIPlugins → proxmox, or edit YAML by hand.

What lands in inventory

PVE objectresource_typeprovider_resource_id
Nodeservernode/{name}
QEMU VMinstanceqemu/{vmid}
LXCinstancelxc/{vmid}
Storagestoragestorage/{id}

Statuses: running / online / availableactive; stopped / offline / pausedstopped; otherwise unknown. The raw PVE status is copied to metadata.status.

For running qemu/lxc the plugin tries to read the network:

  • qemu — QEMU Guest Agent (agent/network-get-interfaces), else IP from config (netN / ip=);
  • lxc — /interfaces, else config.

Metadata: primary_ipv4, hostname = VM name. The resource id does not become host:{ip} — it stays qemu/{vmid} / lxc/{vmid}. The same host seen by Prometheus is a second inventory row; you can merge them in the console.

YAML

yaml
plugins:
  proxmox:
    enabled: true
    sources:
      - id: dc1
        provider_account: "proxmox-dc1"
        sync_interval_seconds: 300
        url: "https://pve.example.com:8006"
        auth_type: token
        api_token: "user@pam!wgflow=xxxxxxxx"
        verify_tls: false

Several clusters = several sources with different id and provider_account.

Source fields

FieldRequiredDescription
idyesShort key in logs (proxmox/dc1)
provider_accountyesHow the site appears in inventory
sync_interval_secondsnoMinimum 300
urlyesAPI base, usually https://host:8006
auth_typeyestoken or password
api_tokenif tokenSee format below
username / passwordif passworduser@realm and password (ticket auth)
verify_tlsnofalse for a self-signed cert

API token format

Create a token in Datacenter → Permissions → API Tokens. In YAML use only user@pam!tokenid=secret, without the PVEAPIToken= prefix.

Need cluster read, and guest agent if you want IPs. A view-only role is enough for the pilot.

Password auth is the fallback; a token is preferred.

Check

bash
wg-flow-agent status
wg-flow-agent dry-run

Dry-run JSON should contain provider: proxmox. Then Sync now in the UI or wait for the interval. In the console: Inventory, filter provider Proxmox.

Common errors

SymptomCheck
TLS / certificate verify failedverify_tls: false or your CA
401 / CSRFtoken without PVEAPIToken=; user@pam!id=secret
Empty collectURL must not include /api2/json; node unreachable
VM without IPGuest Agent missing / not running