mirror of
https://github.com/GoodOlClint/PSProxmoxVE.git
synced 2026-08-13 07:36:52 +00:00
fix: normalize -DiskSize and -RootFsSize before sending to PVE
Disk and rootfs size strings were interpolated directly into the disk spec as "<storage>:<size>", so "60G" produced "local-lvm:60G". On LVM/LVM-thin storages PVE parses the value after the colon as a volume name unless it is a bare integer, returning "unable to parse lvm volume name '60G'". File-backed storages mask this by accepting either form. SizeParser.NormalizeToGibibytes() now strips G/GB/T/TB suffixes and returns a bare GiB integer string, so the documented "32G" call shape works on every storage type. Sub-GB units are rejected with a clear error rather than being silently truncated. Tracked as F086. Closes #58. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -2815,6 +2815,37 @@
|
||||
"evidence": "Replaced JArray? Nodelist with List<Dictionary<string, object?>>? + NativeListConverter, and JObject? Totem with Dictionary<string, object?>? + NativeDictionaryConverter. Removed Newtonsoft.Json.Linq dependency.",
|
||||
"verified_by": "dotnet build + dotnet test (382 passed)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "F086",
|
||||
"title": "New-PveVm -DiskSize and New-PveContainer -RootFsSize pass unit suffix verbatim, LVM rejects 'NG'",
|
||||
"category": "api_contract",
|
||||
"severity": "high",
|
||||
"status": "resolved",
|
||||
"first_detected": "2026-05-20",
|
||||
"github_issue": 58,
|
||||
"files": [
|
||||
"src/PSProxmoxVE/Cmdlets/Vms/NewPveVmCmdlet.cs",
|
||||
"src/PSProxmoxVE/Cmdlets/Containers/NewPveContainerCmdlet.cs"
|
||||
],
|
||||
"description": "Disk and rootfs sizes are interpolated directly into the disk spec as '<storage>:<size>'. The parameter docstring advertises 'e.g. 32G' but on LVM/LVM-thin storages PVE parses the value after the colon as a volume name unless it is a bare integer, failing with 'unable to parse lvm volume name \"32G\"'. File-backed storages (NFS, directory) accept either form, masking the bug in mixed environments.",
|
||||
"scan_history": [
|
||||
{
|
||||
"scan_date": "2026-05-20",
|
||||
"local_id": null,
|
||||
"status": "new"
|
||||
},
|
||||
{
|
||||
"scan_date": "2026-05-20",
|
||||
"local_id": null,
|
||||
"status": "fixed"
|
||||
}
|
||||
],
|
||||
"resolution": {
|
||||
"scan_date": "2026-05-20",
|
||||
"evidence": "Added SizeParser.NormalizeToGibibytes() which strips G/GB/T/TB suffixes (and rejects sub-GB units with a clear error). New-PveVm and New-PveContainer normalize -DiskSize and -RootFsSize through it before constructing the disk spec, so '32G' becomes '<storage>:32' on every storage type.",
|
||||
"verified_by": "dotnet build + dotnet test (576 passed, 31 new SizeParserTests)"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user