604
[ ~/netbox-proxbox/releases/v0.0.29.post5 ]tty0

emerson@netdevops:~/netbox-proxbox$ gh release view v0.0.29.post5 --repo emersonfelipesp/netbox-proxbox

back to releases / back to project

v0.0.29.post5

[open on GitHub]
tag=v0.0.29.post5state=latestpublished=2026-10-16synced=2026-10-16 04:10 UTC
author
emersonfelipesp
created
2026-10-16 01:45 UTC
target
main
downloads
0

emerson@netdevops:~/netbox-proxbox$ cat RELEASE_NOTES.md

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: view when endpoint visibility is required, plus
    run_proxmox_action. Template-build REST actions also require add.
  • 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

  1. Upgrade the separately deployed backend to proxbox-api 0.0.27.post3 and
    install netbox-proxbox 0.0.29.post5. Either service may be upgraded first.
  2. Run python manage.py migrate netbox_proxbox; this applies only
    0106_device_sync_scope_and_netbox_token_approval for this release.
  3. Run python manage.py collectstatic --no-input and restart every NetBox
    application and worker process.
  4. Review and explicitly reapprove every remote NetBox endpoint whose approval
    was cleared. Do not infer approval from backend health.
  5. Create or review endpoint-constrained run_proxmox_action ObjectPermissions
    for non-superuser operators, and enable write_enabled only on API tokens
    that are authorized for unsafe actions.
  6. 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_tasks requires 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.

emerson@netdevops:~/netbox-proxbox$ gh release download --pattern '*'

assets

no binary assets attached

source code