Live supervised validation on felhom-pve: NO 403 on drive management under the scoped token (agent has no storage-registration/pvesm path — all host-ops + Datastore.Audit which is now box-wide). 3b-fix confirmed in the real UI (drives Regisztrálva, no detach alert). A full physical wizard enroll couldn't complete because a raw new device (SD-card reader, no PVE-storage entry) doesn't surface in the init wizard (Observe() lists PVE storages only) — ACL-independent; flagged as a separate new-drive-registration follow-up. No code change. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
5.1 KiB
RUNBOOK result — physical USB enrollment validation on the pool-scoped ACL (3b-fix closure)
Date: 2026-07-01 · Host: felhom-pve (192.168.0.162, node demo-felhom) · Class: live supervised validation, no code change, no version bump. Baseline: script v1.7.0, agent v0.53.0, controller v0.94.0 — all reconfirmed.
Verdict
The ACL residual is CLOSED: drive enrollment / management needs NO Datastore.Allocate and hits NO
403 under the pool-scoped token. The v1.7.0 layout (Datastore.Audit box-wide in Base; write privs
Datastore.Allocate/AllocateSpace per-storage) is complete for storage/drive operations.
A full physical wizard enrollment could not be completed, but for a reason that is ACL-independent and not a permission failure: the plugged-in test device is an SD-card reader that does not surface as a wizard candidate (details below). Per the runbook's own decision branch, that is a "note it — separate follow-up, NOT a permission issue" outcome, not the STOP condition (which is a 403).
What was validated
- Baseline (reconfirmed): roles
Base=Sys.Audit SDN.Use Datastore.Audit,Store=Datastore.Allocate Datastore.AllocateSpace,Guest=VM.* + Pool.Allocate. Agent v0.53.0 active. felhom-usb + felhom-flash enrolled, mounted, untouched. - New device identified unambiguously:
/dev/sdd, 59.5 GiB,SD/MMC/MS PROcard reader, by-idusb-Generic-_SD_MMC_MS_PRO_20120926571200000-0:0, ntfs factory partition, unmounted. Distinct from felhom-usb (sdc) + felhom-flash (sdb). Nothing was formatted (the wizard never offered it). - S1 (drive visibility — the 3b-fix) — PASS, in the real UI: the controller agent-view (Meghajtók
ügynök nézet) shows both felhom-usb + felhom-flash as Regisztrálva with full metadata and no
"Meghajtó leválasztva" (detached) alert.
felhom-agent --selftest=readsees all 5 storages. - No 403 anywhere: the agent log across the whole interaction window (13:44→) shows zero pve-token
permission failures. (The only "permission denied" is the PRE-EXISTING, unrelated non-root PBS
key-file read —
/etc/pve/priv/storage/felhom-pbs.pw— used for PBS datastore metrics, not for backup; a known root→non-root fs-permission gap, see bundle-slice-day0-selfinstall.) - Write-containment intact (re-confirmed): vzdump→felhom-usb → 403 (
Datastore.AllocateSpaceper-storage); out-of-pool guest ops → 403.
Why the new drive did not appear in the wizard (root cause; ACL-independent)
Confirmed at agent source:
- The controller's drive list (
/settings/storage/initwizard + agent-view) is served by the agent'sGET /disks(internal/localapi/disks.gohandleDisks), which iteratesstorage.Observe(). Observe()(internal/storage/observe.gosnapshot()) enumerates only PVE storages viaListStorage/NodeStorage(bothDatastore.Audit— now granted box-wide). It does not enumerate raw/unregistered block devices.- The agent has no storage-registration path at all: its disk endpoints are
assign(host mount),eject,decommission,format(mkfs),guest-attach(bind),netstorage(host mount) — all host-ops via sudo. There is nopvesm add/POST /storage/ storage.cfg writer anywhere in the agent. So the agent never creates a PVE dir-storage (which is exactly why enrollment needs noDatastore.Allocate— confirming the fix).
Consequence: a brand-new raw device that is not yet a registered PVE dir-storage never surfaces in the
init wizard — regardless of the token ACL (it would be equally absent under the old broad token). The
existing dir: felhom-usb / dir: felhom-flash entries in storage.cfg were created out-of-band
(operator/manual during initial setup), not by the agent. The SD-card reader used here (HOTPLUG=0, an
ntfs partition) is simply one instance of "raw device with no PVE-storage entry."
Follow-up flagged (NOT a permission issue, NOT this task)
New-drive registration gap: there is no self-serve path to turn a freshly-plugged raw drive into a
Felhom-managed dir-storage — the init wizard only offers drives that are already PVE dir-storages. A
colleague plugging in a genuinely new USB would need the operator to pvesm add dir … first (or a new
controller/agent feature to register a raw device). Worth a design decision:
- Option A: agent gains a
register-raw-drivestep (host-oppvesm addvia sudo → still no token priv; keeps the ACL as-is), fed by a raw-block-device candidate list (host-opslsblk, notObserve()). - Option B: document that new-drive registration is an operator step.
This is independent of the pool-scoped ACL and does not block it.
NOT done
- A completed physical format→mount→enroll of a genuinely new drive (blocked by the registration gap above, not the ACL). If desired, provide a drive that is already a PVE dir-storage (or add the entry out-of-band) and re-run the wizard — the ACL will not block it (host-ops + Datastore.Audit only).
- Cleanup: the SD-card stick was never touched (no format); it can be unplugged. felhom-usb/felhom-flash
- guest 9201 untouched and healthy throughout.