Version 0.0.29.post5¶
Summary¶
This maintenance release makes Proxmox reads and writes endpoint-exact, lets non-superusers receive endpoint-scoped operational permissions, adds a capture-only operating mode, and correlates WebSocket completion with the backend run that produced it. It also hardens device ownership, remote NetBox connection approval, SSH credential handling, and the release pipeline.
The release pairs with proxbox-api 0.0.27.post3 and includes one database
migration: 0106_device_sync_scope_and_netbox_token_approval.
Release identity¶
The package and plugin source both identify this maintenance release as
0.0.29.post5.
Endpoint-exact HA reads¶
The virtual machine HA tab and per-VM HA API now query only the Proxmox endpoint recorded by the VM's authoritative typed sync state. Linked cluster and node rows must agree with that endpoint, and the caller must be able to view both the NetBox VM and the enabled endpoint. Missing, conflicting, disabled, or hidden identity is refused before backend I/O.
GET /api/plugins/proxbox/ha/vm/{vmid}/ now requires
virtual_machine_id={netbox_vm_pk}. The plugin verifies that the selected VM's
synchronized Proxmox VM ID matches {vmid} before contacting the backend.
Grantable operational actions¶
Operational verbs, firewall actions, tags, template builds, packer builds, and
instance creation now use the run_proxmox_action custom action on the exact
owning ProxmoxEndpoint. The authorized NetBox endpoint is translated to
proxbox-api's independent endpoint ID and remains bound to the dispatch. A
disabled or conflicting endpoint is refused without backend resolution or
network I/O, including firewall previews.
Create a NetBox ObjectPermission with these values:
- Object type: Proxbox > Proxmox endpoint.
- Actions:
viewwhen endpoint visibility is required, plusrun_proxmox_action. Template-build REST actions also requireadd. - Users or groups: the intended operators.
- Constraints: the permitted endpoint set, such as
{"pk": 17}or{"name": "lab-pve"}.
Use separate constrained grants for different endpoint sets. An unconstrained
grant covers every Proxmox endpoint. The literal core.run_proxmox_action
permission remains an additive, deprecated compatibility path and should not be
used for new grants. Unsafe requests authenticated by an API token additionally
require write_enabled=True; session authentication is unchanged.
SSH credential handling¶
Creating a Proxmox endpoint with reuse endpoint username/password now recognizes the submitted password during model validation without storing it early. This also fixes adding a password to a token-only endpoint and creating an endpoint with service monitoring enabled. API and serializer paths still reject reuse when neither a stored nor pending password exists.
An SSH terminal request for a disabled endpoint now returns HTTP 409 before credential access, provider reads, writes, or backend I/O. This applies to endpoint and node targets and to stored, one-shot, and newly stored credentials. The credential, save, readiness, and terminal paths were split into small typed helpers so each modified function remains within the repository's complexity limit.
Capture-only NetBox instances¶
Set PLUGINS_CONFIG["netbox_proxbox"]["automatic_background_tasks"] to the
boolean False to retain Proxbox inventory models, APIs, explicit sync jobs,
integrity handlers, and audit records while suppressing startup discovery and
stock one-minute service-monitor registration. An existing stock unowned,
unscoped monitor drains without polling or re-enqueueing. User-created, custom,
or scoped jobs are preserved. Restart every application and worker process
after changing this setting.
Run-correlated WebSocket completion¶
When the connected backend advertises ws_run_id: 1, each sync command carries
a run identifier and only a matching aggregate terminal may complete it. Failed
aggregate status reaches the browser as an error, while malformed, foreign, and
late frames cannot release another run. Endpoint trust is revalidated before
every transmission and retry.
The plugin and proxbox-api 0.0.27.post3 may be upgraded in either order. A
backend without the capability continues to receive legacy bare commands. In a
mixed-version rolling deployment, one attributable rejected envelope is retried
once in legacy form and later commands on that connection remain legacy.
Device ownership and connection approval¶
Migration 0106_device_sync_scope_and_netbox_token_approval adds nullable
proxmox_endpoint_raw_id to device sync state. Existing rows remain null and
unclaimed because historical identifiers cannot prove present endpoint
ownership. Consumers must corroborate cluster, site, and placement before
adopting a legacy candidate. Claims lock the sidecar row atomically: a null or
same-ID claim succeeds, while changing a committed owner returns HTTP 409 with
endpoint_ownership_conflict.
Remote NetBox connection approval now binds the effective token version and the non-secret token reference or key selected for transmission. Token changes therefore require explicit reapproval. The migration clears existing NetBox endpoint approvals once without approving any target; Proxmox endpoint approvals are unchanged. Review and approve each affected NetBox endpoint through its connection-authority panel after migration.
Release pipeline¶
The public mirror now carries only the authoritative main branch, and the
mocked CI job installs the CLI extra required by its tests. OCI release
validation requires both package indexes to expose a usable source archive or
compatible pure-Python wheel, resolves the backend version from the unique
release row in COMPATIBILITY.md, smoke-tests the amd64 manifest from the final
multi-architecture index, and publishes that same tested digest without a
rebuild.
OpenBao storage guards¶
Switching the credential storage backend, changing an endpoint storage override, or deleting an owner now locks the settings state first and validates the final state on the write database, so primary/replica routing is respected. A blank endpoint override is resolved against the locked global selection. Both the default and base managers are guarded, including bulk updates and conflict upserts. Deleting an owner is refused while provider assignments remain, even without an owned material reference; a legacy endpoint holding only assignment relations is cleaned up inside the surrounding transaction after every assignment deletion is authorized. No migration is involved.
Upgrade notes¶
- Upgrade the separately deployed backend to
proxbox-api 0.0.27.post3and installnetbox-proxbox 0.0.29.post5. Either service may be upgraded first. - Run
python manage.py migrate netbox_proxbox; this applies only0106_device_sync_scope_and_netbox_token_approvalfor this release. - Run
python manage.py collectstatic --no-inputand restart every NetBox application and worker process. - Review and explicitly reapprove every remote NetBox endpoint whose approval was cleared. Do not infer approval from backend health.
- Create or review endpoint-constrained
run_proxmox_actionObjectPermissions for non-superuser operators, and enablewrite_enabledonly on API tokens that are authorized for unsafe actions. - Verify one endpoint-scoped HA read, one permitted operational action, and one full synchronization before returning the installation to service.
Compatibility baseline¶
Current backend-runtime pairing: netbox-proxbox 0.0.29.post5 <-> proxbox-api 0.0.27.post3 <-> proxmox-sdk 0.0.15 <-> netbox-sdk 0.0.13. This netbox-sdk version is proxbox-api's REST dependency only and does not provide the semantic MCP bridge.
| NetBox | netbox-proxbox | proxbox-api | netbox-sdk | proxmox-sdk |
|---|---|---|---|---|
| 4.5.8-4.7.0 GA | v0.0.29.post5 | v0.0.27.post3 | v0.0.13 | v0.0.15 |
The plugin declares NetBox 4.5.8 through 4.7.99; continuous integration
verifies the listed GA range through NetBox 4.7.0.
Known limitations¶
- Legacy device sync-state rows remain deliberately unclaimed until the paired backend corroborates and stamps their endpoint identity.
- Backends without run-correlation capability retain legacy virtual-machine terminal completion and the 600-second idle latch.
- Changing
automatic_background_tasksrequires a restart of all application and worker processes; it does not cancel explicit or user-owned jobs. - The OCI appliance remains a testing topology, not a production deployment.