Files
pulse/internal/truenas
rcourtman ff11b6fd99 Keep a remediation lock when a reporter gains an identity key
A host agent or Docker host that reported no machine ID, DMI UUID or
cluster slot is keyed by its source-specific ID and holds no identity pin,
because a pin needs a strong key. When a later report carried one the
resource minted a new ID, no pin named the old one, and pin-driven
succession declared nothing. The operator's rows, a remediation lock
included, stayed on an ID the registry no longer lists, while the dispatch
gates read the row of the listed ID. Pulse could then act on a host the
operator had told it never to touch.

The retired ID is recomputable from the report itself, as a Proxmox
guest's retired IDs are. ingestRecord now notes the source-specific ID of
each host agent and Docker host reporter that lands on another ID with a
key, and the snapshot and record ingests hand the batch to
applyRecordSuccessions, which skips an ID still observed. The stores
already carry the row, or its lock onto an existing row, once per
predecessor. Proxmox nodes are left out on purpose: they borrow their
linked agent's key, and a link or split can move that borrow either way.

The other uncovered change named in the contract, a physical disk re-keyed
in place to a machine-scoped ID, is not a way around the lock today: the
planner plans only capabilities a resource advertises and no producer gives
a physical disk one. TestPhysicalDiskResourcesAdvertiseNoActionCapability
pins that for the Proxmox, agent, Unraid and TrueNAS producers, and the
contract now says so, including that the disk's other operator settings are
not carried.
2026-10-10 12:38:39 +01:00
..