Troubleshooting Intent Operations¶
This page covers common failures in the NetBox to Proxmox intent workflow. Use it after reviewing NetBox to Proxmox Intent and Deletion Requests.
Fast Triage¶
| Symptom | First check |
|---|---|
| Plan page says branching is missing | netbox-branching plugin installation |
| Plan page has no diffs | Branch contains no VirtualMachine ChangeDiff rows |
| Merge is NetBox-only | Branch apply_to_proxmox is false |
| Merge is blocked | Plan verdict table |
| Apply job stays queued | RQ worker and default queue |
| Apply job fails immediately | FastAPI endpoint and backend reachability |
| Backend says writes disabled | Proxmox endpoint allow_writes |
| Deletion row never appears | Apply job per-VM results |
| Approval is forbidden | Authorizer permission or self-approval policy |
| Drift remains after apply | Reflection sync logs and per-VM results |
Required Services¶
Check these processes first:
- NetBox web process.
- NetBox RQ worker.
- Redis.
- proxbox-api.
- Proxmox API reachability.
The apply job uses the default NetBox queue. A worker that listens only to a custom queue will not execute intent jobs.
Settings Problems¶
Master Flag Disabled¶
Symptom:
- Plan page shows
Intent master flag is disabled. - Branch merges do not enqueue apply jobs.
Fix:
- Open Proxbox settings.
- Enable
netbox_to_proxmox_enabled. - Type
allow-edit-and-add-actions. - Save.
- Rerun the plan.
Typed Phrase Missing¶
Symptom:
- Settings form refuses to save.
- Field error references the confirmation phrase.
Fix:
- Type the phrase exactly.
- Do not add quotes.
- Do not use a translated phrase.
- Save again.
The phrase is cleared when the master flag is turned off.
Branch Not Opted In¶
Symptom:
- Plan page says branch is not opted in.
- Merge completes but Proxmox is unchanged.
Fix:
- Open the branch.
- Set
apply_to_proxmox=True. - Save.
- Rerun the plan.
Destroy Not Confirmed¶
Symptom:
- DELETE verdict is blocked.
- Message references
apply_destroy_confirmed.
Fix:
- Confirm this branch really should request a Proxmox deletion.
- Set
apply_destroy_confirmed=True. - Rerun the plan.
- Continue with separate deletion authorization after merge.
Merge Validator Problems¶
Validator Not Registered¶
Symptom:
- Branch merges without expected plan blockers.
- No plan call appears in proxbox-api logs.
Fix:
- Check NetBox
configuration.py. - Confirm netbox-branching merge validators include
netbox_proxbox.intent.merge_validator.validate_proxmox_intent. - Restart NetBox.
- Retry with a test branch.
Plan Endpoint Unavailable¶
Symptom:
- Plan summary shows a backend transport error.
- Merge validator blocks with a proxbox-api reachability message.
Fix:
- Open the FastAPI endpoint detail page.
- Confirm URL, port, SSL mode, and token.
- Check proxbox-api
/health. - Check network policy between NetBox and proxbox-api.
- Check TLS certificates when
verify_ssl=True.
Apply Job Problems¶
Job Stays Queued¶
Symptom:
- Apply job state is queued.
- No live log output appears.
Fix:
- Start a NetBox RQ worker.
- Confirm it listens to
default. - Confirm Redis is reachable.
- Restart the worker after code deployment.
- Cancel and recreate the job only after confirming the worker state.
Job Is Running Too Long¶
Symptom:
- Apply job state remains running.
- Some per-VM results are missing.
Fix:
- Check proxbox-api logs.
- Check Proxmox task duration.
- Confirm backend timeout settings.
- Confirm network latency to Proxmox.
- Avoid merging unrelated changes into the same branch while investigating.
Job Fails With Permission Denied¶
Symptom:
- Per-VM result message contains
permission denied.
Fix:
- Identify operation and kind.
- Grant the matching permission to the requester.
- Use
intent_create_vmorintent_create_lxcfor creates. - Use
intent_update_vmorintent_update_lxcfor updates. - Use
intent_delete_vmorintent_delete_lxcfor deletion requests. - Rerun from a new branch or corrected workflow.
Writes Disabled¶
Symptom:
- Backend result contains
writes_disabled_for_endpoint.
Fix:
- Open the target Proxmox endpoint.
- Review whether writes are allowed for that endpoint.
- Enable
allow_writesonly after approval. - Rerun the operation.
Deletion Request Problems¶
No Request Created¶
Symptom:
- A branch deleted a VM but no deletion request exists.
Checks:
- Did the branch have
apply_to_proxmox=True? - Did the branch have
apply_destroy_confirmed=True? - Did the requester have
intent_delete_*? - Did the apply job run?
- What does the DELETE per-VM result say?
Approval Forbidden¶
Symptom:
- The approval page returns forbidden.
Checks:
- Is the user authenticated?
- Does the user have
authorize_deletion_request? - Is the user also the requester?
- Is self-approval disabled?
- Is the request still pending?
Executor Does Not Run¶
Symptom:
- Request state is approved but not executing.
Fix:
- Check RQ workers.
- Check Redis.
- Confirm the executor job was enqueued.
- Confirm the worker has current code.
- Review NetBox job logs.
Executor Fails¶
Symptom:
- Request state is failed.
- Executor run UUID may be present.
Fix:
- Review the metadata snapshot.
- Check Proxmox object still exists.
- Check node name and VMID.
- Check backend credentials.
- Check proxbox-api logs.
- Resolve the backend error.
- Re-run only through the approved executor path.
Cloud-Init Warnings¶
The branch validator can warn when cloud-init user data contains a plaintext
password: line.
Treat the warning as a review stop unless the password is intentionally temporary and approved by local policy.
Fix:
- Prefer SSH keys.
- Use secrets handled outside branch data.
- Remove plaintext password lines.
- Rerun the plan.
Drift After Apply¶
Expected result:
- CREATE and UPDATE apply to Proxmox.
- Reflection sync runs later.
- NetBox and Proxmox converge.
- Drift is zero for the applied objects.
If drift remains:
- Open apply job per-VM results.
- Check whether the operation succeeded, skipped, or failed.
- Run a normal reflection sync.
- Compare Proxmox normalized values with NetBox values.
- Check whether a field is unsupported by the payload builder.
- Check whether someone changed Proxmox out of band.
- File a bug if the apply succeeded but reflection cannot converge.
Live SSE Log Problems¶
The apply job detail page shows a live log when it can find the backing NetBox job row.
If the log is empty:
- Confirm the apply job was enqueued by the plugin.
- Confirm the core Job row still exists.
- Confirm the browser can access the stream URL.
- Confirm the job has not already been purged.
- Check browser console errors for blocked EventSource connections.
Plan Summary Problems¶
If the plan page returns a local message instead of backend verdicts:
- Intent is disabled.
- The branch is not opted in.
- The branch has no VM diffs.
- Destroy confirmation is missing.
- proxbox-api is unreachable.
Fix the local blocker first. The backend plan is called only after local gates are satisfied.
Escalation Bundle¶
When opening an issue or escalating internally, include:
- Plugin version.
- proxbox-api version.
- NetBox version.
- Branch ID.
- Plan summary screenshot or copied verdicts.
- Apply job ID.
- Apply job run UUID.
- Deletion request ID if involved.
- Relevant backend logs.
- Proxmox task output if available.
Do not include plaintext tokens, backend secrets, or cloud-init passwords.