netbox-proxbox v0.0.15
Compatibility: NetBox 4.5.8 → 4.6.99. Pairs with proxbox-api ≥ 0.0.11 (reflection + HA) and proxbox-api 0.0.12 (NetBox → Proxmox intent path).
Highlights
- NetBox → Proxmox intent path (#377) — opt-in second integration direction. Twelve sub-PRs (A–L: design, gate, custom fields, plan validator, post-merge hook, CREATE/UPDATE/DELETE dispatch, deletion-request UI, four-eyes regression suite, cloud-init, UI polish). Default-off; existing reflection behavior unchanged.
- Cluster HA dashboard + per-VM HA tab (#243) —
HAClusterViewat/plugins/proxbox/ha/andProxmoxVMHATabViewon each VM detail page, live fromproxbox-api 0.0.11. - Operational verbs (#376) — strictly opt-in start / stop / snapshot / migrate REST endpoints, gated by
ProxmoxEndpoint.allow_writes. - SSH-driven hardware discovery (#374) —
dmidecode+ethtoolreflected into NetBox device custom fields. - NetBox Branching integration (#370, #406) —
X-NetBox-Branchheader awareness on the reflection surface. - Headless
proxbox_syncDjango management command (#360) — fire-and-forget or--wait --timeoutfor cron / systemd timers / CI smoke. - Standalone scheduler container (#372) —
PROXBOX_MODE=off|continuous|interval|cron. - Cloud-init read-side reflection (#363) — three read-only custom fields.
- NetBox-metadata description parsing (#366) — four new overwrite flags.
- Tenant assignment by VM-name regex (#365) and default-role pinning by VM type (#364).
- Discovery-tag pattern (#362) —
proxbox-discovered-{qemu,lxc,cluster,node}stamped on create-branch only. overwrite_vm_proxmox_tagsflag + VM tag pills (#421).- Idempotent NetBox-side bootstrap (#358) of supporting objects.
Safety Model — four mandatory invariants
The intent path enforces four invariants. Bypassing any of these is a regression:
- Default direction is Proxmox → NetBox (read-only). Intent path is opt-in at every level.
- Master flag is locked behind a typed confirmation phrase.
netbox_to_proxmox_enabled=Truerequiresnetbox_to_proxmox_typed_confirmation == "allow-edit-and-add-actions"to passProxboxPluginSettingsForm.clean(). - Every Proxmox-side DELETE goes through a
DeletionRequest. Branch merges containing DELETE diffs never call Proxmox destroy at merge time. - Authorization permission is held separately from
intent_delete_*. Self-approval rejected unlessintent_apply_authorization_self_approve_allowed=True(defaultFalse).
Issues closed
| # | Title |
|---|---|
| #243 | Add HA status in Proxmox to NetBox |
| #352 | Use HTTPS toggle decoupled from Verify SSL
|
| #354 | IPAM dns_name populated from Proxmox guest hostnames
|
| #357 | Drift-detecting writes (createOrUpdate helper)
|
| #358 | Idempotent NetBox-side bootstrap of supporting objects |
| #359 | dcim.mac_addresses linkage for VM interfaces |
| #360 | proxbox_sync Django management command
|
| #361 | IPv6 link-local skip + zone-ID strip in IP reconciler |
| #362 | Discovery-tag pattern |
| #363 | Cloud-init read-side reflection |
| #364 | Default-role pinning by VM type |
| #365 | Tenant assignment by VM-name regex |
| #366 | NetBox metadata description parsing (4 overwrite flags) |
| #367 | latest_job UUID stamp + delete_orphans
|
| #368 | Duplicate VM-name suffix + duplicate_name_resolved SSE frame
|
| #369 | Plugin Roadmap — v0.0.15 |
| #370 | Optional NetBox Branching support |
| #371 | docker-compose-single-exec.yml one-shot pattern
|
| #372 | Standalone scheduler container with PROXBOX_MODE
|
| #373 | pxb sync run CLI subcommand
|
| #374 | Hardware discovery via SSH + dmidecode + ethtool |
| #375 | Optional ProxboxSession-style backend refactor |
| #376 | Strictly opt-in operational verbs as REST endpoints |
| #377 | NetBox → Proxmox integration using netbox-branching |
| #391 | NetBox 4.6 VirtualMachineType relation auto-detect
|
| #406 | Port NetBox Branching into v0.0.15 + bridge with SyncContext |
| #421 | Sync Proxmox tags to NetBox tags |
| #438 | Operator-selected environment field on ProxmoxEndpoint
|
Compatibility matrix
| NetBox | netbox-proxbox | proxbox-api | netbox-sdk | proxmox-sdk |
|---|---|---|---|---|
| ≥ 4.5.8 | v0.0.15 | v0.0.11 (reflection + HA) / v0.0.12 (intent) | 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 |
NetBox compatibility range: 4.5.8 – 4.6.99 (unchanged from v0.0.14).
Upgrade notes
- Run
python manage.py migrate netbox_proxbox. Migrations are additive: one-time backfill (#352), new columns onProxboxPluginSettings/ProxmoxEndpoint(#354), default-offdelete_orphansflag (#367), and the intent migrations0038_intent_permissions,0039_intent_custom_fields,0040_apply_job_full,0041_deletion_request_full. The custom-field migration is a no-op for the two Branch CFs whennetbox_branchingis not installed. - If you operate the proxbox-api
*-nginximage and previously could not connect, edit the FastAPI endpoint after upgrade and tick Use HTTPS (and untick Verify SSL if you use the bundled mkcert cert). - For the
dns_namefix, pair withproxbox-api ≥ 0.0.11.proxbox-api 0.0.10.post2is wire-compatible for theUse HTTPSfix but does not populatedns_name. - Default for
netbox_to_proxmox_enabledisFalse. Existing installs see no behavior change unless an operator explicitly opts in. Seedocs/operations/netbox-to-proxmox.mdanddocs/operations/deletion-requests.mdto opt in. - The
Deletion RequestsUI lives at/plugins/proxbox/intent/deletion-requests/. The apply-job UI lives at/plugins/proxbox/intent/apply-jobs/.
Full release notes
See docs/release-notes/version-0.0.15.md for the section-by-section breakdown of every change.
Full diff: v0.0.14...v0.0.15