mirror of
https://github.com/GoodOlClint/PSProxmoxVE.git
synced 2026-07-26 07:58:14 +00:00
ee69c699b1
Minor bump: this release adds features (New-PveVm disk controller/IO options and Get-PveVmConfig key surfacing, #65) alongside two bug fixes (#64 semicolon form-encoding, #68 guest-exec argv). Updates the three release artifacts in lockstep: psd1 ModuleVersion, psd1 ReleaseNotes, and CHANGELOG ([0.2.0] cut from [Unreleased]). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
7.5 KiB
7.5 KiB
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Conventional Commits.
[Unreleased]
[0.2.0] - 2026-05-22
Added
New-PveVmdisk controller / IO options:-DiskBus(virtio/scsi/sata/ide),-ScsiHardware(scsihw),-DiskIoThread,-DiskAio,-DiskSsd,-DiskDiscard,-DiskCache. Invalid combinations (e.g.ssdon virtio,iothreadon sata/ide or scsi withoutvirtio-scsi-single) are rejected up front with a clear error. (#65)Get-PveVmConfignow surfacesscsihw,efidisk0, andtpmstate0as typed properties, plus anAdditionalPropertiesdictionary capturing any other config key (e.g.hostpci0) as native .NET values instead of silently dropping it. (#65)
Fixed
- Form values containing
;were split into bogus fields by PVE's parser, so a multi-device boot order set viaSet-PveVmConfig -AdditionalConfig @{ boot = 'order=scsi0;ide2' }failed withunable to parse drive options. Semicolons are now percent-encoded. (#64) Invoke-PveVmGuestExec -Argswere delivered to the guest as JSON on STDIN instead of as argv, so commands ran with no/garbage arguments. Arguments are now sent as the PVEcommandarray (repeated keys), reaching the process as real argv. (#68)
[0.1.3] - 2026-05-20
Added
Connect-PveServer -TimeoutSecondsto set the session-defaultHttpClienttimeout (default 100s;0= infinite). (#59)Send-PveFile -TimeoutSecondsandInvoke-PveStorageDownload -TimeoutSecondsfor per-call override with a 30-minute implicit default so large uploads/downloads no longer trip the 100s default. (#59)
Fixed
New-PveVm -DiskSizeandNew-PveContainer -RootFsSizenow normalize unit suffixes (32G,1T,32GB, etc.) to bare GiB before constructing the disk spec. Previously the suffix was passed verbatim, which LVM/LVM-thin storages rejected withunable to parse lvm volume name '32G'. Sub-GB units (M,MB,K,KB) are now rejected client-side with a clear error. (#58)PveHttpClient.SendAsyncsurfacesHttpClient.Timeoutfirings asPveApiException(RequestTimeout)with the resource path and configured timeout, instead of leaking a rawTaskCanceledException. Works acrossnet48,net10.0, andnetstandard2.0. (#59)- Disk-size validation runs before
ShouldProcessso typos like512Mare caught with-WhatIf, regardless of whether-DiskStorage/-RootFsStorageis also supplied. (#58)
[0.1.2] - 2026-03-27
Fixed
Get-PveApiToken:FullTokenIdis now computed fromUserId!TokenId(was always empty). (#44)Set-PvePermission: addedtokenACL type with auto-detection from!in-UgId, enabling permission assignment for API tokens. (#43)Connect-PveServer: always emits the session to the pipeline. Use-Quietto suppress;-PassThruis kept hidden for backwards compatibility. (#45)
[0.1.1] - 2026-03-26
Added
- Firewall management cmdlets (21): rules, security groups, aliases, IP sets, options at cluster/node/VM/container levels
- Backup/vzdump cmdlets (5): ad-hoc backup creation and scheduled backup job CRUD
- SDN IPAM cmdlets (3):
Get/New/Remove-PveSdnIpamfor IPAM plugin management - SDN DNS cmdlets (3):
Get/New/Remove-PveSdnDnsfor DNS plugin management - SDN Controller cmdlets (3):
Get/New/Remove-PveSdnControllerfor controller management - SDN Update cmdlets (7):
Set-PveSdnZone/Vnet/Subnet/Controller/Ipam/Dns+Invoke-PveSdnApply Set-PveRole,Set-PveStorage,Set-PveApiTokenfor missing update operationsGet-PveClusterResource: single-call cluster-wide inventory of all VMs, containers, nodes, storage- Task management:
Get-PveTaskList(list tasks on node),Stop-PveTask(cancel running tasks) - Pool management cmdlets (4):
Get/New/Set/Remove-PvePool Get-PveBackupInfo: find VMs/containers not covered by backup jobs- VM disk operations:
Move-PveVmDisk(storage migration),Remove-PveVmDisk(detach/delete) - Guest agent extensions (6):
Get-PveVmGuestOsInfo,Get-PveVmGuestFsInfo,Read/Write-PveVmGuestFile,Set-PveVmGuestPassword,Invoke-PveVmGuestFsTrim - Container gaps (6):
Suspend/Resume-PveContainer,Resize-PveContainerDisk,New-PveContainerTemplate,Move-PveContainerVolume,Get-PveContainerInterface - Storage content management (4):
Get-PveStorageStatus,Remove/Set-PveStorageContent,New-PveStorageDisk - Node operations (6):
Get/Set-PveNodeConfig,Get/Set-PveNodeDns,Start/Stop-PveNodeVms - Access management (9):
Get/New/Set/Remove-PveGroup,Get/New/Set/Remove-PveDomain,Set-PvePassword - Two-tier version gating: introduced vs default version with clear user messaging
- 70 xUnit tests validating every
ValidateSetagainst the PVE OpenAPI spec, withpve-api-enums.jsonfixture extracted from the full spec - Integration tests for firewall rules, aliases, IP sets, backup jobs, and OVA import
- PSGallery version badge in README
Changed
- All cmdlet classes sealed for design clarity and JIT optimization
[OutputType]attribute added to all 169 cmdlets for IntelliSense and pipeline support- Publishable projects retargeted to
netstandard2.0for PS 5.1 + PS 7.x compatibility System.Text.Jsonattributes removed — module usesNewtonsoft.Jsonexclusively- Inline task-polling loops replaced with
TaskService.WaitForTask(timeout + progress support) - Password parameters changed from
stringtoSecureStringwith secure memory handling ValidateRange(100, 999999999)added to allVmIdparametersUri.EscapeDataString()applied to all dynamic URL path segments- Hardcoded verb strings replaced with verb class constants (
VerbsCommon.Get, etc.) - Auth header magic strings extracted to named constants in
PveHttpClient - Bare
catchblocks replaced with specific or filtered exception handling - MAML help (dll-Help.xml) and 170 markdown cmdlet docs generated
- PSGallery publish workflow with PS 5.1 smoke testing
Fixed
ConfirmImpact.Highadded to all destructive cmdlets (Stop, Reset, Restart, Suspend, Remove, Restore, New-PveTemplate)- Storage
ValidateSet: removedglusterfs(dropped in PVE 9), addedbtrfsandesxi - Backup compression:
none→0(PVE expects the string"0", not"none") - Cluster resource filter: removed
lxc(PVE usesvmfor both QEMU and LXC) - Hardcoded test password moved from CI workflow to GitHub Actions secret
- Terraform variable default password removed (requires env var)
[0.1.0-preview] - 2026-03-19
Added
- Initial project structure and solution setup
- Ticket and API token authentication with session management
- HTTP client with manual multipart ISO upload (bugzilla 7389 workaround)
- Typed response models for PVE 8.x and 9.x API resources
- Service layer for all resource domains
- 66 PowerShell cmdlets for VMs, containers, storage, networking, SDN, users, roles, permissions, API tokens, templates, cloud-init, snapshots, and tasks
- QEMU guest agent cmdlets (Test-PveVmGuestAgent, Get-PveVmGuestNetwork, Invoke-PveVmGuestExec)
- xUnit unit tests for core library
- Pester 5 cmdlet tests across OS/PS version matrix (Windows PS 5.1, PS 7.5 on Windows/Linux/macOS)
- Integration tests against live PVE 8 and PVE 9 instances via Terraform-provisioned nested VMs
- GitHub Actions CI/CD workflows (build, unit tests, integration tests)
- Format definitions for default table output on all PS versions