Netbox Plugin - Integrate Proxmox and Netbox
Project description
Proxbox
Proxbox is a NetBox plugin that synchronizes Proxmox infrastructure data into NetBox. It keeps your DCIM up-to-date with real Proxmox clusters, nodes, virtual machines, containers, and backups.
What It Does
Proxbox discovers and syncs the following from Proxmox into NetBox:
- Clusters and Nodes — Proxmox cluster name, mode (cluster/standalone), quorum status, node count, and Proxmox VE version. Each node includes online status, IP address, CPU usage, memory usage, and uptime at sync time. Optionally link to NetBox Cluster and Device objects.
- Virtual Machines — VM status, resources, and configuration
- Containers (LXC) — Container details and settings
- VM Snapshots — Point-in-time snapshots for recovery
- VM Backups — Backup jobs and restore points
- Storage — Datastores and storage content
- Network Interfaces and IPs — Network interfaces and IP addresses assigned to VMs and containers
- Backup Routines — Backup job definitions from Proxmox
- Replications — Replication job status and configuration
Note: All metrics (CPU, memory, uptime, etc.) are captured as point-in-time snapshots at sync time, not continuous monitoring.
Sync runs on-demand from the NetBox UI or scheduled automatically via NetBox's job system.
What's New in v0.0.15.post2
Paired with backend proxbox-api 0.0.11.post2.
- PDM / PBS endpoint models — New
PBSEndpoint,PDMEndpoint, andPDMRemoteDjango models land the ForeignKey plumbing for Proxmox Datacenter Manager support per #449.PDMEndpointdeclaresproxmox_endpoints(M2M toProxmoxEndpoint) andpbs_endpoints(M2M toPBSEndpoint) so operators can register which PVE/PBS instances each PDM federates. UI / API surfaces land in Phase 2 (v0.0.16.x). - Build PVE template action —
ProxmoxEndpointViewSetexposes abuild-pve-templateaction so operators can build PVE-installer cloud-init templates against an endpoint from the plugin REST API; mirrors the/cloud/templates/pveroute added inproxbox-api 0.0.11.post2. - Backend pickup of proxmox-sdk 0.0.5.post1 — The paired
proxbox-api 0.0.11.post2lifts itsproxmox-sdkpin from0.0.4.post3to0.0.5.post1, which adds the newproxmox_sdk.pdmsubpackage (full PDM SDK + CLI + TUI + mock server). - Read-only reflection path is unchanged. No NetBox compatibility rotation ships in this patch release. Carries forward every fix shipped in
v0.0.15.post1.
Full notes: Release Notes — v0.0.15.post2.
Compatibility Matrix
| NetBox | netbox-proxbox | proxbox-api | netbox-sdk | proxmox-sdk |
|---|---|---|---|---|
| >=4.5.8 | v0.0.15.post2 | v0.0.11.post2 | v0.0.8.post1 | v0.0.5.post1 |
| >=4.5.8 | v0.0.15.post1 | v0.0.11.post1 | v0.0.8.post1 | v0.0.3.post1 |
| >=4.5.8 | v0.0.15 | v0.0.11 | v0.0.8.post1 | v0.0.3.post1 |
| >=4.5.8 | v0.0.14 | v0.0.10.post2 | v0.0.8.post1 | v0.0.3.post1 |
| >=4.5.8 | v0.0.13.post4 | v0.0.9.post2 | v0.0.7.post6 | v0.0.3.post1 |
| >=4.6.0-beta2 | v0.0.13.post2 | v0.0.9.post1 | v0.0.7.post6 | v0.0.3.post1 |
| >=4.6.0-beta2 | v0.0.13.post1 | v0.0.9 | v0.0.7.post6 | v0.0.3.post1 |
| >=4.6.0-beta1 | v0.0.12 | v0.0.8.post1 | v0.0.7.post6 | v0.0.3.post1 |
| >=4.5.7 | v0.0.11 | v0.0.7 | v0.0.7.post4 | v0.0.2.post2 |
proxbox-api is a separate backend service in this matrix, not a Python
dependency of the NetBox plugin. netbox-proxbox communicates with it over
REST, SSE, and WebSocket.
Requirements
- NetBox 4.5.8, 4.5.9, or 4.6.x
- Verified with NetBox v4.5.8, v4.5.9, and official v4.6.0
- Python 3.12+
- Proxmox VE 7.x, 8.x, or 9.x (PVE 9 requires
VM.GuestAgent.Auditon the API role; see "Troubleshooting" below for the PVE 9 auth checklist) - Proxbox API backend as a separately deployed service (see below)
Quick Start
Choose the installation path that matches your NetBox deployment:
- Standard NetBox install (venv on host): follow steps below.
- NetBox Docker install (
netbox-docker): use the Docker-specific workflow in Installing the Plugin in Docker-Based NetBox Deployments.
-
Install the plugin into your NetBox virtual environment (host/venv deployment):
cd /opt/netbox/netbox git clone https://github.com/emersonfelipesp/netbox-proxbox.git source /opt/netbox/venv/bin/activate pip install -e ./netbox-proxbox
-
Enable the plugin in
netbox/netbox/configuration.py:PLUGINS = ["netbox_proxbox"]
-
Run migrations and collect static files:
python3 manage.py migrate netbox_proxbox python3 manage.py collectstatic --no-input sudo systemctl restart netbox
-
Install the Proxbox API backend:
mkdir -p /opt/proxbox-api cd /opt/proxbox-api python3 -m venv venv source venv/bin/activate pip install proxbox-api uvicorn proxbox_api.main:app --host 0.0.0.0 --port 8800
Or use Docker (the published image runs nginx on port 8000 inside the container, in front of uvicorn):
docker run -d --name proxbox-api -p 8800:8000 emersonfelipesp/proxbox-api:latest
HTTPS with mkcert (optional): the backend also publishes
emersonfelipesp/proxbox-api:latest-mkcert(and:<version>-mkcert). nginx terminates TLS there (mkcert certs) onPORT(default 8000); add more certificate names or IPs withMKCERT_EXTRA_NAMES(comma- or space-separated). Example:docker run -d --name proxbox-api-tls \ -p 8800:8000 \ -e MKCERT_EXTRA_NAMES='proxbox.backend.local' \ emersonfelipesp/proxbox-api:latest-mkcert
Point your NetBox ProxBox API endpoint at
https://<host>:8800(or your mapped port). Trust the mkcert root on clients if needed; see the proxbox-api README for build flags,CAROOT, and details. -
Configure endpoints in NetBox:
- Go to Plugins > Proxbox
- Create a Proxmox API endpoint (your Proxmox host URL and token).
The Proxmox user/token must hold a role with
Datastore.Audit,Sys.Audit,VM.Audit,VM.Monitor, andVM.GuestAgent.Audit.VM.GuestAgent.Auditis required on Proxmox VE >= 9 for the backend to pull VM IPs through the QEMU guest agent — without it, VMs sync but their IP addresses are missing from NetBox. See the proxbox-api docs Required Proxmox role privileges for thepveum role addcommand. - Create a NetBox API endpoint (your NetBox URL and token)
- Create a ProxBox API endpoint (the backend from step 4)
-
Run your first sync:
Click Full Update on the Proxbox home page. Progress appears in real-time.
NetBox Docker Install Option
If your NetBox runs with netbox-community/netbox-docker, install the plugin through the Docker plugin files in your NetBox Docker project:
-
Add plugin requirements to
plugin_requirements.txt(PyPI or Git):netbox-proxbox # or # netbox-proxbox @ git+https://github.com/emersonfelipesp/netbox-proxbox.git
-
Enable the plugin in
configuration/plugins.py:PLUGINS = ["netbox_proxbox"]
-
Rebuild and restart NetBox:
docker compose build docker compose up -d
-
Run migrations in the NetBox container:
docker compose exec netbox /opt/netbox/netbox/manage.py migrate
For complete Docker installation instructions, validation checks, and Git/source install examples, see docs/installation/3-installing-plugin-docker.md.
Scheduled Sync
Proxbox sync jobs run on NetBox's default RQ queue. A standard NetBox installation already ships a netbox-rq systemd service that runs:
manage.py rqworker high default low
Check whether it is running before doing anything else:
sudo systemctl status netbox-rq
If it is active (running), you have nothing extra to configure — Proxbox jobs will be picked up automatically.
If the service is inactive or missing, enable it:
sudo systemctl enable --now netbox-rq
The unit file is provided by NetBox at contrib/netbox-rq.service in the NetBox repository. If you need to create it manually, copy it from there and run:
sudo systemctl daemon-reload
sudo systemctl enable --now netbox-rq
Upgrading from an older Proxbox release? Jobs used to be enqueued on the
netbox_proxbox.syncqueue. The stocknetbox-rqservice does not listen to that queue, so old-style jobs will not run. New jobs always usedefaultand are picked up without any changes.
Schedule a sync
- In NetBox, go to Proxbox > Schedule Sync.
- Choose one or more sync types (All, Devices, VMs, Storage, etc.).
- Optionally set a Schedule at time and a Recurs every interval in minutes (e.g.
1440for daily). - Click Schedule.
Track job status under Proxbox > Sync Jobs or Operations > Background Jobs.
Job timeout
Proxbox sync jobs default to a 7200-second (2-hour) RQ wall-clock limit (PROXBOX_SYNC_JOB_TIMEOUT). NetBox's default RQ_DEFAULT_TIMEOUT is only 300 s, which would kill long syncs. No configuration is needed unless your syncs routinely take longer than two hours; if they do, override the constant in netbox_proxbox/jobs.py.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
Job stays pending |
No RQ worker running, or worker not listening to default queue |
Start/restart manage.py rqworker |
Job stays running for a long time |
Proxbox API is still syncing or stream is slow | Check the job Log tab; wait or inspect the backend |
Job errored: JobTimeoutException |
RQ wall-clock limit exceeded | Increase PROXBOX_SYNC_JOB_TIMEOUT in netbox_proxbox/jobs.py |
| HTTP 401 Authentication failed! against Proxmox VE 9.x | A stale stored token is overriding fresh password credentials, or the role is missing PVE 9 permissions | On the Proxmox endpoint edit page, tick "Clear stored API token on save" (and/or "Clear stored password on save") to wipe the unused secret. The form rejects rows that end up with neither a password nor a complete (token name, token value) pair. Confirm the role on Proxmox grants Datastore.Audit, Sys.Audit, VM.Audit, and on PVE 9 also VM.GuestAgent.Audit. The plugin now surfaces the upstream PVE 9 error message in the UI instead of "Unknown error.", which makes "no such realm" / "expired token" / "missing privilege" failures self-diagnosing. |
Switching credentials cleanly (PVE 9 friendly)
The Proxmox endpoint edit form preserves the stored password and token value
when you submit blank masked fields — that is intentional for partial edits.
When you genuinely want to switch auth modes (for example, password → token
or vice versa, or rotate a leaked secret), tick the matching "Clear
stored …" checkbox so the unused credential is wiped on save. Clearing the
token always clears both token name and token value together so the row
never persists in a half-token state.
Documentation
Full documentation is available at emersonfelipesp.github.io/netbox-proxbox.
Key pages:
Community
- GitHub Discussions: https://github.com/orgs/emersonfelipesp/discussions
- Discord: https://discord.gg/X6FudvXW
- Telegram: https://t.me/netboxbr
Contributing
See DEVELOP.md for development setup and contribution guidelines.
Support the Project
If Proxbox has been useful for you, consider supporting the project on GitHub Sponsors:
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file netbox_proxbox-0.0.15.post2.tar.gz.
File metadata
- Download URL: netbox_proxbox-0.0.15.post2.tar.gz
- Upload date:
- Size: 8.1 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
be51617c4d668055254782a1f42851f88d2a9c66dff34d3a14ce50976010e1b0
|
|
| MD5 |
7ead407d113070033f43f981852bb2e3
|
|
| BLAKE2b-256 |
ed4c986fd2e9e7d1298639b416e854b56daee9bf88459bf034ba7a3a7be687a1
|
File details
Details for the file netbox_proxbox-0.0.15.post2-py3-none-any.whl.
File metadata
- Download URL: netbox_proxbox-0.0.15.post2-py3-none-any.whl
- Upload date:
- Size: 4.1 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7f999403212f5b59be52f1ad963d97a8012da6b239b7b2d043388065165e6e7c
|
|
| MD5 |
590d14aa30efbfd18c7606e74323a117
|
|
| BLAKE2b-256 |
048d5ece179d6177d5d522246c46af85ce4b514e1fdf89d9db326a2f29e9d563
|