- Replace form_urlencoded with RFC 3986 compliant URI encoding - Implement aws_uri_encode() matching AWS SigV4 spec exactly - Unreserved chars (A-Z,a-z,0-9,-,_,.,~) not encoded - All other chars percent-encoded with uppercase hex - Preserve slashes in paths, encode in query params - Normalize empty paths to '/' per AWS spec - Fix test expectations (body hash, HMAC values) - Add comprehensive SigV4 signature determinism test This fixes the canonicalization mismatch that caused signature validation failures in T047. Auth can now be enabled for production. Refs: T058.S1
50 lines
1.4 KiB
YAML
50 lines
1.4 KiB
YAML
id: T054
|
|
name: PlasmaVMC Operations & Resilience
|
|
goal: Implement missing VM lifecycle operations (Update, Reset, Hotplug) and ChainFire state watch
|
|
status: planned
|
|
priority: P1
|
|
owner: peerB
|
|
created: 2025-12-12
|
|
depends_on: []
|
|
blocks: [T039]
|
|
|
|
context: |
|
|
**Findings from T049 Audit:**
|
|
- `vm_service.rs` TODOs: Update, Reset, Disk/NIC attachment/detachment.
|
|
- "Implement VM watch via ChainFire watch" is pending.
|
|
|
|
**Strategic Value:**
|
|
- Required for production operations (resizing VMs, recovering stuck VMs, attaching volumes).
|
|
- ChainFire watch is critical for multi-node state synchronization (HA).
|
|
|
|
acceptance:
|
|
- VM Update (CPU/RAM) changes persisted and applied (next boot or live if supported)
|
|
- VM Reset (Hard/Soft) functional
|
|
- Disk/NIC hot-plug/unplug functional via QMP
|
|
- PlasmaVMC servers watch ChainFire for state changes (external coordination)
|
|
|
|
steps:
|
|
- step: S1
|
|
name: VM Lifecycle Ops
|
|
done: Implement Update and Reset APIs
|
|
status: pending
|
|
owner: peerB
|
|
priority: P1
|
|
|
|
- step: S2
|
|
name: Hotplug Support
|
|
done: Implement Attach/Detach APIs for Disk/NIC
|
|
status: pending
|
|
owner: peerB
|
|
priority: P1
|
|
|
|
- step: S3
|
|
name: ChainFire Watch
|
|
done: Implement state watcher for external events
|
|
status: pending
|
|
owner: peerB
|
|
priority: P1
|
|
|
|
evidence: []
|
|
notes: |
|
|
Depends on QMP capability of the underlying hypervisor (KVM/QEMU).
|