diff --git a/src/PSProxmoxVE.Core/Errors/PveErrorMapper.cs b/src/PSProxmoxVE.Core/Errors/PveErrorMapper.cs new file mode 100644 index 0000000..2cf00f8 --- /dev/null +++ b/src/PSProxmoxVE.Core/Errors/PveErrorMapper.cs @@ -0,0 +1,166 @@ +using System; +using System.Globalization; +using System.Net; +using PSProxmoxVE.Core.Exceptions; + +namespace PSProxmoxVE.Core.Errors +{ + /// + /// The error classifications this module reports. Every member name is also the name of a + /// System.Management.Automation.ErrorCategory member, so the cmdlet layer can + /// translate a kind without inventing a second vocabulary. + /// + public enum PveErrorKind + { + /// The failure was not recognised and carries no classification. + NotSpecified, + + /// The caller lacks the privilege or the credential the operation needs. + PermissionDenied, + + /// The credential was rejected because the session is no longer valid. + AuthenticationError, + + /// The addressed object does not exist on the server. + ObjectNotFound, + + /// The server rejected the request payload or a parameter value. + InvalidArgument, + + /// The operation did not complete inside its time budget. + OperationTimeout, + + /// The server could not be reached, or no session is established. + ConnectionError, + + /// The server was reached but cannot service the request. + ResourceUnavailable, + + /// The operation is not valid for the server or object in its current state. + InvalidOperation, + + /// The operation started and then stopped without completing. + OperationStopped, + } + + /// The classification and error identifier derived from a failure. + public sealed class PveErrorDescriptor + { + /// Initializes a new descriptor. + /// The classification of the failure. + /// The stable identifier a script can match on. + /// The object the failure is about, or null when none is known. + public PveErrorDescriptor(PveErrorKind kind, string errorId, object? target) + { + Kind = kind; + ErrorId = errorId; + Target = target; + } + + /// The classification of the failure. + public PveErrorKind Kind { get; } + + /// The stable identifier a script can match on, for example PveApi.404.nodes/pve1/qemu/100. + public string ErrorId { get; } + + /// The object the failure is about, derived from the exception when the caller supplied none. + public object? Target { get; } + } + + /// Maps a module exception to the classification and identifier reported to PowerShell. + public static class PveErrorMapper + { + private const string ApiErrorIdPrefix = "PveApi"; + + /// + /// Reports whether is one this module classifies. An + /// exception that is not recognised must reach the PowerShell engine untouched: it may + /// carry its own error record, or be a flow-control or fatal exception. + /// + /// The failure to test. + /// True when classifies the exception. + public static bool IsRecognized(Exception exception) + => exception is PveApiException + or PveNotConnectedException + or PveSessionExpiredException + or PveTaskFailedException + or PveTaskTimeoutException + or PveVersionException; + + /// Classifies and derives its error identifier and target. + /// The failure to classify. + /// The classification, error identifier and derived target. + public static PveErrorDescriptor Describe(Exception exception) + { + if (exception is null) throw new ArgumentNullException(nameof(exception)); + + switch (exception) + { + case PveApiException api: + return new PveErrorDescriptor(KindForStatus(api.StatusCode), ApiErrorId(api), NullIfBlank(api.Resource)); + + case PveNotConnectedException: + return new PveErrorDescriptor(PveErrorKind.ConnectionError, "PveNotConnected", null); + + case PveSessionExpiredException: + return new PveErrorDescriptor(PveErrorKind.AuthenticationError, "PveSessionExpired", null); + + case PveTaskFailedException taskFailed: + return new PveErrorDescriptor(PveErrorKind.OperationStopped, "PveTaskFailed", NullIfBlank(taskFailed.Upid)); + + case PveTaskTimeoutException taskTimeout: + return new PveErrorDescriptor(PveErrorKind.OperationTimeout, "PveTaskTimeout", NullIfBlank(taskTimeout.Upid)); + + case PveVersionException: + return new PveErrorDescriptor(PveErrorKind.InvalidOperation, "PveVersionTooOld", null); + + default: + return new PveErrorDescriptor(PveErrorKind.NotSpecified, exception.GetType().Name, null); + } + } + + private static PveErrorKind KindForStatus(HttpStatusCode status) + { + switch (status) + { + case HttpStatusCode.BadRequest: + return PveErrorKind.InvalidArgument; + + // 401 is a rejected or expired ticket, which the module also reports as + // PveSessionExpiredException; 403 is a privilege the ticket does not carry. + case HttpStatusCode.Unauthorized: + return PveErrorKind.AuthenticationError; + + case HttpStatusCode.Forbidden: + return PveErrorKind.PermissionDenied; + + case HttpStatusCode.NotFound: + return PveErrorKind.ObjectNotFound; + + case HttpStatusCode.RequestTimeout: + case HttpStatusCode.GatewayTimeout: + return PveErrorKind.OperationTimeout; + + // PveHttpClient reports a failed connection as 503, so 503 is a reachability + // failure here and not the server's own "try again later". + case HttpStatusCode.ServiceUnavailable: + return PveErrorKind.ConnectionError; + } + + var code = (int)status; + if (code >= 500 && code <= 599) return PveErrorKind.ResourceUnavailable; + return PveErrorKind.InvalidOperation; + } + + private static string ApiErrorId(PveApiException exception) + { + var status = ((int)exception.StatusCode).ToString(CultureInfo.InvariantCulture); + return string.IsNullOrWhiteSpace(exception.Resource) + ? $"{ApiErrorIdPrefix}.{status}" + : $"{ApiErrorIdPrefix}.{status}.{exception.Resource}"; + } + + private static object? NullIfBlank(string? value) + => string.IsNullOrWhiteSpace(value) ? null : value; + } +} diff --git a/src/PSProxmoxVE/Cmdlets/Backup/GetPveBackupInfoCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Backup/GetPveBackupInfoCmdlet.cs index a1e4835..99d68a9 100644 --- a/src/PSProxmoxVE/Cmdlets/Backup/GetPveBackupInfoCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Backup/GetPveBackupInfoCmdlet.cs @@ -15,7 +15,7 @@ namespace PSProxmoxVE.Cmdlets.Backup [OutputType(typeof(PSObject))] public sealed class GetPveBackupInfoCmdlet : PveCmdletBase { - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); RequireVersion(session, "Backup compliance info", 7, 0); diff --git a/src/PSProxmoxVE/Cmdlets/Backup/GetPveBackupJobCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Backup/GetPveBackupJobCmdlet.cs index 183e8b1..c14d4ae 100644 --- a/src/PSProxmoxVE/Cmdlets/Backup/GetPveBackupJobCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Backup/GetPveBackupJobCmdlet.cs @@ -21,7 +21,7 @@ namespace PSProxmoxVE.Cmdlets.Backup [Parameter(Mandatory = false, Position = 0, ValueFromPipelineByPropertyName = true, HelpMessage = "The backup job ID.")] public string? Id { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); var service = new BackupService(); diff --git a/src/PSProxmoxVE/Cmdlets/Backup/NewPveBackupCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Backup/NewPveBackupCmdlet.cs index 50c98b3..3c9cb1a 100644 --- a/src/PSProxmoxVE/Cmdlets/Backup/NewPveBackupCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Backup/NewPveBackupCmdlet.cs @@ -63,7 +63,7 @@ namespace PSProxmoxVE.Cmdlets.Backup [Parameter(Mandatory = false, HelpMessage = "Timeout in seconds for -Wait (default 3600).")] public int Timeout { get; set; } = 3600; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"VM {VmId} on node '{Node}'", "New-PveBackup")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Backup/NewPveBackupJobCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Backup/NewPveBackupJobCmdlet.cs index 5daf7c5..dca3929 100644 --- a/src/PSProxmoxVE/Cmdlets/Backup/NewPveBackupJobCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Backup/NewPveBackupJobCmdlet.cs @@ -91,7 +91,7 @@ namespace PSProxmoxVE.Cmdlets.Backup [Parameter(Mandatory = false, HelpMessage = "Prune-backups configuration string.")] public string? PruneBackups { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess("cluster backup configuration", "New-PveBackupJob")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Backup/RemovePveBackupJobCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Backup/RemovePveBackupJobCmdlet.cs index 4a93da0..85acfe6 100644 --- a/src/PSProxmoxVE/Cmdlets/Backup/RemovePveBackupJobCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Backup/RemovePveBackupJobCmdlet.cs @@ -22,7 +22,7 @@ namespace PSProxmoxVE.Cmdlets.Backup [Parameter(Mandatory = true, Position = 0, ValueFromPipelineByPropertyName = true, HelpMessage = "The backup job ID.")] public string Id { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"backup job '{Id}'", "Remove-PveBackupJob")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Backup/SetPveBackupJobCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Backup/SetPveBackupJobCmdlet.cs index 0d710d1..2bacf7b 100644 --- a/src/PSProxmoxVE/Cmdlets/Backup/SetPveBackupJobCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Backup/SetPveBackupJobCmdlet.cs @@ -96,7 +96,7 @@ namespace PSProxmoxVE.Cmdlets.Backup [Parameter(Mandatory = false, HelpMessage = "Prune-backups configuration string.")] public string? PruneBackups { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"backup job '{Id}'", "Set-PveBackupJob")) return; diff --git a/src/PSProxmoxVE/Cmdlets/CloudInit/GetPveCloudInitConfigCmdlet.cs b/src/PSProxmoxVE/Cmdlets/CloudInit/GetPveCloudInitConfigCmdlet.cs index 7d74299..a217351 100644 --- a/src/PSProxmoxVE/Cmdlets/CloudInit/GetPveCloudInitConfigCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/CloudInit/GetPveCloudInitConfigCmdlet.cs @@ -25,7 +25,7 @@ namespace PSProxmoxVE.Cmdlets.CloudInit [ValidateRange(100, 999999999)] public int VmId { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); RequireVersion(session, "Cloud-Init management", 7, 2); diff --git a/src/PSProxmoxVE/Cmdlets/CloudInit/InvokePveCloudInitRegenerateCmdlet.cs b/src/PSProxmoxVE/Cmdlets/CloudInit/InvokePveCloudInitRegenerateCmdlet.cs index 6a6da6b..e511d1c 100644 --- a/src/PSProxmoxVE/Cmdlets/CloudInit/InvokePveCloudInitRegenerateCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/CloudInit/InvokePveCloudInitRegenerateCmdlet.cs @@ -30,7 +30,7 @@ namespace PSProxmoxVE.Cmdlets.CloudInit [Parameter(HelpMessage = "Wait for the task to complete before returning.")] public SwitchParameter Wait { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"VM {VmId} on {Node}", "Regenerate PVE Cloud-Init Drive")) return; diff --git a/src/PSProxmoxVE/Cmdlets/CloudInit/SetPveCloudInitConfigCmdlet.cs b/src/PSProxmoxVE/Cmdlets/CloudInit/SetPveCloudInitConfigCmdlet.cs index 889880f..0e3482e 100644 --- a/src/PSProxmoxVE/Cmdlets/CloudInit/SetPveCloudInitConfigCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/CloudInit/SetPveCloudInitConfigCmdlet.cs @@ -65,7 +65,7 @@ namespace PSProxmoxVE.Cmdlets.CloudInit [Parameter(Mandatory = false, HelpMessage = "Wait for the task to complete before returning.")] public SwitchParameter Wait { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); RequireVersion(session, "Cloud-Init management", 7, 2); diff --git a/src/PSProxmoxVE/Cmdlets/Cluster/AddPveClusterConfigNodeCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Cluster/AddPveClusterConfigNodeCmdlet.cs index d073237..08d1b60 100644 --- a/src/PSProxmoxVE/Cmdlets/Cluster/AddPveClusterConfigNodeCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Cluster/AddPveClusterConfigNodeCmdlet.cs @@ -51,7 +51,7 @@ namespace PSProxmoxVE.Cmdlets.Cluster [Parameter(Mandatory = false, HelpMessage = "Wait for the task to complete before returning.")] public SwitchParameter Wait { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"node '{Node}'", "Add to cluster configuration")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Cluster/AddPveClusterMemberCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Cluster/AddPveClusterMemberCmdlet.cs index a8735b6..25fe5fc 100644 --- a/src/PSProxmoxVE/Cmdlets/Cluster/AddPveClusterMemberCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Cluster/AddPveClusterMemberCmdlet.cs @@ -61,7 +61,7 @@ namespace PSProxmoxVE.Cmdlets.Cluster private const int ReauthMaxAttempts = 10; private const int ReauthDelayMs = 3000; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"this node to cluster via '{Hostname}'", "Join cluster")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Cluster/GetPveClusterConfigCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Cluster/GetPveClusterConfigCmdlet.cs index 63daee8..21e0c6f 100644 --- a/src/PSProxmoxVE/Cmdlets/Cluster/GetPveClusterConfigCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Cluster/GetPveClusterConfigCmdlet.cs @@ -15,7 +15,7 @@ namespace PSProxmoxVE.Cmdlets.Cluster [OutputType(typeof(Dictionary))] public sealed class GetPveClusterConfigCmdlet : PveCmdletBase { - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); var service = new ClusterConfigService(); diff --git a/src/PSProxmoxVE/Cmdlets/Cluster/GetPveClusterConfigNodeCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Cluster/GetPveClusterConfigNodeCmdlet.cs index b89be61..0de32c2 100644 --- a/src/PSProxmoxVE/Cmdlets/Cluster/GetPveClusterConfigNodeCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Cluster/GetPveClusterConfigNodeCmdlet.cs @@ -15,7 +15,7 @@ namespace PSProxmoxVE.Cmdlets.Cluster [OutputType(typeof(PveClusterConfigNode))] public sealed class GetPveClusterConfigNodeCmdlet : PveCmdletBase { - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); var service = new ClusterConfigService(); diff --git a/src/PSProxmoxVE/Cmdlets/Cluster/GetPveClusterJoinInfoCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Cluster/GetPveClusterJoinInfoCmdlet.cs index a4a1dcb..6cca588 100644 --- a/src/PSProxmoxVE/Cmdlets/Cluster/GetPveClusterJoinInfoCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Cluster/GetPveClusterJoinInfoCmdlet.cs @@ -20,7 +20,7 @@ namespace PSProxmoxVE.Cmdlets.Cluster [Parameter(Mandatory = false, Position = 0, HelpMessage = "Node to get join info for (defaults to current).")] public string? Node { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); var service = new ClusterConfigService(); diff --git a/src/PSProxmoxVE/Cmdlets/Cluster/GetPveClusterNextIdCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Cluster/GetPveClusterNextIdCmdlet.cs index 413da3f..98eac68 100644 --- a/src/PSProxmoxVE/Cmdlets/Cluster/GetPveClusterNextIdCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Cluster/GetPveClusterNextIdCmdlet.cs @@ -19,7 +19,7 @@ namespace PSProxmoxVE.Cmdlets.Cluster [ValidateRange(100, 999999999)] public int? VmId { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); var service = new ClusterConfigService(); diff --git a/src/PSProxmoxVE/Cmdlets/Cluster/GetPveClusterOptionCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Cluster/GetPveClusterOptionCmdlet.cs index 66e4f48..94e20e5 100644 --- a/src/PSProxmoxVE/Cmdlets/Cluster/GetPveClusterOptionCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Cluster/GetPveClusterOptionCmdlet.cs @@ -15,7 +15,7 @@ namespace PSProxmoxVE.Cmdlets.Cluster [OutputType(typeof(PveClusterOptions))] public sealed class GetPveClusterOptionCmdlet : PveCmdletBase { - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); var service = new ClusterConfigService(); diff --git a/src/PSProxmoxVE/Cmdlets/Cluster/GetPveClusterResourceCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Cluster/GetPveClusterResourceCmdlet.cs index f2ef8ff..b1a657e 100644 --- a/src/PSProxmoxVE/Cmdlets/Cluster/GetPveClusterResourceCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Cluster/GetPveClusterResourceCmdlet.cs @@ -29,7 +29,7 @@ namespace PSProxmoxVE.Cmdlets.Cluster [Parameter(Mandatory = false, HelpMessage = "Filter results to a specific node name.")] public string? Node { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); var service = new ClusterService(); diff --git a/src/PSProxmoxVE/Cmdlets/Cluster/GetPveClusterStatusCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Cluster/GetPveClusterStatusCmdlet.cs index c9dbb7a..b5c3663 100644 --- a/src/PSProxmoxVE/Cmdlets/Cluster/GetPveClusterStatusCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Cluster/GetPveClusterStatusCmdlet.cs @@ -15,7 +15,7 @@ namespace PSProxmoxVE.Cmdlets.Cluster [OutputType(typeof(PveClusterStatus))] public sealed class GetPveClusterStatusCmdlet : PveCmdletBase { - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); var service = new ClusterService(); diff --git a/src/PSProxmoxVE/Cmdlets/Cluster/NewPveClusterCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Cluster/NewPveClusterCmdlet.cs index 4a485a9..35c2b86 100644 --- a/src/PSProxmoxVE/Cmdlets/Cluster/NewPveClusterCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Cluster/NewPveClusterCmdlet.cs @@ -46,7 +46,7 @@ namespace PSProxmoxVE.Cmdlets.Cluster [ValidateRange(1, 3600)] public int Timeout { get; set; } = 60; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"cluster '{ClusterName}'", "Create new cluster")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Cluster/RemovePveClusterConfigNodeCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Cluster/RemovePveClusterConfigNodeCmdlet.cs index 675f86e..f887e9f 100644 --- a/src/PSProxmoxVE/Cmdlets/Cluster/RemovePveClusterConfigNodeCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Cluster/RemovePveClusterConfigNodeCmdlet.cs @@ -20,7 +20,7 @@ namespace PSProxmoxVE.Cmdlets.Cluster [Parameter(Mandatory = true, Position = 0, HelpMessage = "The cluster node name to remove.")] public string Node { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"node '{Node}'", "Remove from cluster configuration")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Cluster/SetPveClusterOptionCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Cluster/SetPveClusterOptionCmdlet.cs index 5d47e7b..405a263 100644 --- a/src/PSProxmoxVE/Cmdlets/Cluster/SetPveClusterOptionCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Cluster/SetPveClusterOptionCmdlet.cs @@ -65,7 +65,7 @@ namespace PSProxmoxVE.Cmdlets.Cluster [Parameter(Mandatory = false, HelpMessage = "Comma-separated list of settings to delete/reset.")] public string? Delete { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess("cluster options", "Set")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Connection/DisconnectPveServerCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Connection/DisconnectPveServerCmdlet.cs index b31af64..1b9185b 100644 --- a/src/PSProxmoxVE/Cmdlets/Connection/DisconnectPveServerCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Connection/DisconnectPveServerCmdlet.cs @@ -16,7 +16,7 @@ namespace PSProxmoxVE.Cmdlets.Connection [Alias("dpve")] public sealed class DisconnectPveServerCmdlet : PveCmdletBase { - protected override void ProcessRecord() + protected override void ProcessPveRecord() { bool explicitSessionSupplied = MyInvocation.BoundParameters.ContainsKey(nameof(Session)); var sessionToDisconnect = explicitSessionSupplied ? Session : ModuleState.ActiveSession; diff --git a/src/PSProxmoxVE/Cmdlets/Containers/CopyPveContainerCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Containers/CopyPveContainerCmdlet.cs index 54f2394..1bece33 100644 --- a/src/PSProxmoxVE/Cmdlets/Containers/CopyPveContainerCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Containers/CopyPveContainerCmdlet.cs @@ -70,7 +70,7 @@ namespace PSProxmoxVE.Cmdlets.Containers [Parameter(Mandatory = false, HelpMessage = "Wait for the task to complete before returning.")] public SwitchParameter Wait { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var target = TargetNode ?? SourceNode; if (!ShouldProcess($"Container {VmId} on node '{SourceNode}' to new container on node '{target}'", "Copy-PveContainer")) diff --git a/src/PSProxmoxVE/Cmdlets/Containers/GetPveContainerCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Containers/GetPveContainerCmdlet.cs index 6c7e5b4..a2808ea 100644 --- a/src/PSProxmoxVE/Cmdlets/Containers/GetPveContainerCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Containers/GetPveContainerCmdlet.cs @@ -52,7 +52,7 @@ namespace PSProxmoxVE.Cmdlets.Containers [Parameter(Mandatory = false, HelpMessage = "Filter by tag.")] public string? Tag { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); diff --git a/src/PSProxmoxVE/Cmdlets/Containers/GetPveContainerConfigCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Containers/GetPveContainerConfigCmdlet.cs index de3d263..44b4c83 100644 --- a/src/PSProxmoxVE/Cmdlets/Containers/GetPveContainerConfigCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Containers/GetPveContainerConfigCmdlet.cs @@ -30,7 +30,7 @@ namespace PSProxmoxVE.Cmdlets.Containers [ValidateRange(100, 999999999)] public int VmId { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); var containerService = new ContainerService(); diff --git a/src/PSProxmoxVE/Cmdlets/Containers/GetPveContainerInterfaceCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Containers/GetPveContainerInterfaceCmdlet.cs index 965f4b0..090122a 100644 --- a/src/PSProxmoxVE/Cmdlets/Containers/GetPveContainerInterfaceCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Containers/GetPveContainerInterfaceCmdlet.cs @@ -24,7 +24,7 @@ namespace PSProxmoxVE.Cmdlets.Containers [ValidateRange(100, 999999999)] public int VmId { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); RequireVersion(session, "Container interface listing", 8, 1); diff --git a/src/PSProxmoxVE/Cmdlets/Containers/GetPveContainerSnapshotCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Containers/GetPveContainerSnapshotCmdlet.cs index d8cf495..5a1a8a8 100644 --- a/src/PSProxmoxVE/Cmdlets/Containers/GetPveContainerSnapshotCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Containers/GetPveContainerSnapshotCmdlet.cs @@ -31,7 +31,7 @@ namespace PSProxmoxVE.Cmdlets.Containers [Parameter(Mandatory = false, HelpMessage = "Filter by snapshot name.")] public string? Name { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); diff --git a/src/PSProxmoxVE/Cmdlets/Containers/MovePveContainerCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Containers/MovePveContainerCmdlet.cs index f7ce0f0..26f3675 100644 --- a/src/PSProxmoxVE/Cmdlets/Containers/MovePveContainerCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Containers/MovePveContainerCmdlet.cs @@ -40,7 +40,7 @@ namespace PSProxmoxVE.Cmdlets.Containers [Parameter(Mandatory = false, HelpMessage = "Wait for the task to complete before returning.")] public SwitchParameter Wait { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"Container {VmId} from node '{Node}' to node '{TargetNode}'", "Move-PveContainer")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Containers/MovePveContainerVolumeCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Containers/MovePveContainerVolumeCmdlet.cs index 3ed2ec3..1f4b455 100644 --- a/src/PSProxmoxVE/Cmdlets/Containers/MovePveContainerVolumeCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Containers/MovePveContainerVolumeCmdlet.cs @@ -53,7 +53,7 @@ namespace PSProxmoxVE.Cmdlets.Containers [Parameter(Mandatory = false, HelpMessage = "Wait for the task to complete before returning.")] public SwitchParameter Wait { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"Volume '{Volume}' on container {VmId} (node '{Node}') to storage '{Storage}'", "Move-PveContainerVolume")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Containers/NewPveContainerCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Containers/NewPveContainerCmdlet.cs index aef0360..f14fc30 100644 --- a/src/PSProxmoxVE/Cmdlets/Containers/NewPveContainerCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Containers/NewPveContainerCmdlet.cs @@ -125,7 +125,7 @@ namespace PSProxmoxVE.Cmdlets.Containers [Parameter(Mandatory = false, HelpMessage = "Wait for the task to complete before returning.")] public SwitchParameter Wait { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { // Validate -RootFsSize before ShouldProcess so typos like "512M" are rejected // even with -WhatIf, and so the error is raised regardless of whether diff --git a/src/PSProxmoxVE/Cmdlets/Containers/NewPveContainerSnapshotCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Containers/NewPveContainerSnapshotCmdlet.cs index 433eb2c..233f115 100644 --- a/src/PSProxmoxVE/Cmdlets/Containers/NewPveContainerSnapshotCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Containers/NewPveContainerSnapshotCmdlet.cs @@ -36,7 +36,7 @@ namespace PSProxmoxVE.Cmdlets.Containers [Parameter(Mandatory = false, HelpMessage = "Wait for the task to complete before returning.")] public SwitchParameter Wait { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"Container {VmId} on {Node}", $"Create snapshot '{Name}'")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Containers/NewPveContainerTemplateCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Containers/NewPveContainerTemplateCmdlet.cs index 5c60e6c..0abdf94 100644 --- a/src/PSProxmoxVE/Cmdlets/Containers/NewPveContainerTemplateCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Containers/NewPveContainerTemplateCmdlet.cs @@ -31,7 +31,7 @@ namespace PSProxmoxVE.Cmdlets.Containers [ValidateRange(100, 999999999)] public int VmId { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"Container {VmId} on node '{Node}'", "New-PveContainerTemplate")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Containers/RemovePveContainerCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Containers/RemovePveContainerCmdlet.cs index e45a4de..a8b120d 100644 --- a/src/PSProxmoxVE/Cmdlets/Containers/RemovePveContainerCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Containers/RemovePveContainerCmdlet.cs @@ -54,7 +54,7 @@ namespace PSProxmoxVE.Cmdlets.Containers [Parameter(Mandatory = false, HelpMessage = "Wait for the task to complete before returning.")] public SwitchParameter Wait { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"Container {VmId} on node '{Node}'", "Remove-PveContainer")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Containers/RemovePveContainerSnapshotCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Containers/RemovePveContainerSnapshotCmdlet.cs index 68f9e3e..b736298 100644 --- a/src/PSProxmoxVE/Cmdlets/Containers/RemovePveContainerSnapshotCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Containers/RemovePveContainerSnapshotCmdlet.cs @@ -34,7 +34,7 @@ namespace PSProxmoxVE.Cmdlets.Containers [Parameter(Mandatory = false, HelpMessage = "Wait for the task to complete before returning.")] public SwitchParameter Wait { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); diff --git a/src/PSProxmoxVE/Cmdlets/Containers/ResizePveContainerDiskCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Containers/ResizePveContainerDiskCmdlet.cs index 0571b55..a545f83 100644 --- a/src/PSProxmoxVE/Cmdlets/Containers/ResizePveContainerDiskCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Containers/ResizePveContainerDiskCmdlet.cs @@ -44,7 +44,7 @@ namespace PSProxmoxVE.Cmdlets.Containers [Parameter(Mandatory = true, HelpMessage = "New disk size (e.g. 50G or +5G to grow).")] public string Size { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"Disk '{Disk}' on container {VmId} (node '{Node}') to size '{Size}'", "Resize-PveContainerDisk")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Containers/RestartPveContainerCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Containers/RestartPveContainerCmdlet.cs index 48a5040..3970f81 100644 --- a/src/PSProxmoxVE/Cmdlets/Containers/RestartPveContainerCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Containers/RestartPveContainerCmdlet.cs @@ -46,7 +46,7 @@ namespace PSProxmoxVE.Cmdlets.Containers [Parameter(Mandatory = false, HelpMessage = "Wait for the task to complete before returning.")] public SwitchParameter Wait { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"Container {VmId} on node '{Node}'", "Restart-PveContainer")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Containers/RestorePveContainerSnapshotCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Containers/RestorePveContainerSnapshotCmdlet.cs index 9873027..30ea5e0 100644 --- a/src/PSProxmoxVE/Cmdlets/Containers/RestorePveContainerSnapshotCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Containers/RestorePveContainerSnapshotCmdlet.cs @@ -37,7 +37,7 @@ namespace PSProxmoxVE.Cmdlets.Containers [Parameter(Mandatory = false, HelpMessage = "Wait for the task to complete before returning.")] public SwitchParameter Wait { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); diff --git a/src/PSProxmoxVE/Cmdlets/Containers/ResumePveContainerCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Containers/ResumePveContainerCmdlet.cs index ccc814c..52b1aa4 100644 --- a/src/PSProxmoxVE/Cmdlets/Containers/ResumePveContainerCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Containers/ResumePveContainerCmdlet.cs @@ -39,7 +39,7 @@ namespace PSProxmoxVE.Cmdlets.Containers [ValidateRange(1, 3600)] public int Timeout { get; set; } = 60; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"Container {VmId} on node '{Node}'", "Resume-PveContainer")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Containers/SetPveContainerConfigCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Containers/SetPveContainerConfigCmdlet.cs index cfdb66a..7cc6887 100644 --- a/src/PSProxmoxVE/Cmdlets/Containers/SetPveContainerConfigCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Containers/SetPveContainerConfigCmdlet.cs @@ -99,7 +99,7 @@ namespace PSProxmoxVE.Cmdlets.Containers [Parameter(Mandatory = false, HelpMessage = "Comma-separated config keys to delete.")] public string? Delete { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"Container {VmId} on node '{Node}'", "Set-PveContainerConfig")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Containers/StartPveContainerCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Containers/StartPveContainerCmdlet.cs index 86bdf1d..277e671 100644 --- a/src/PSProxmoxVE/Cmdlets/Containers/StartPveContainerCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Containers/StartPveContainerCmdlet.cs @@ -41,7 +41,7 @@ namespace PSProxmoxVE.Cmdlets.Containers [ValidateRange(1, 3600)] public int Timeout { get; set; } = 60; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"Container {VmId} on node '{Node}'", "Start-PveContainer")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Containers/StopPveContainerCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Containers/StopPveContainerCmdlet.cs index 1729594..facb539 100644 --- a/src/PSProxmoxVE/Cmdlets/Containers/StopPveContainerCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Containers/StopPveContainerCmdlet.cs @@ -43,7 +43,7 @@ namespace PSProxmoxVE.Cmdlets.Containers [ValidateRange(1, 3600)] public int Timeout { get; set; } = 60; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"Container {VmId} on node '{Node}'", "Stop-PveContainer")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Containers/SuspendPveContainerCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Containers/SuspendPveContainerCmdlet.cs index 97e74da..dba35bc 100644 --- a/src/PSProxmoxVE/Cmdlets/Containers/SuspendPveContainerCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Containers/SuspendPveContainerCmdlet.cs @@ -39,7 +39,7 @@ namespace PSProxmoxVE.Cmdlets.Containers [ValidateRange(1, 3600)] public int Timeout { get; set; } = 60; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"Container {VmId} on node '{Node}'", "Suspend-PveContainer")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Firewall/GetPveFirewallAliasCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Firewall/GetPveFirewallAliasCmdlet.cs index 5812cfe..9db2c8c 100644 --- a/src/PSProxmoxVE/Cmdlets/Firewall/GetPveFirewallAliasCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Firewall/GetPveFirewallAliasCmdlet.cs @@ -24,7 +24,7 @@ namespace PSProxmoxVE.Cmdlets.Firewall [Parameter(Mandatory = false, HelpMessage = "Optional alias name to filter by.")] public string? Name { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var level = Level; if (!FirewallScope.TryValidate(level, Node, VmId, null, out var scopeErrorId, out var scopeMessage)) diff --git a/src/PSProxmoxVE/Cmdlets/Firewall/GetPveFirewallGroupCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Firewall/GetPveFirewallGroupCmdlet.cs index cf65456..8d8283c 100644 --- a/src/PSProxmoxVE/Cmdlets/Firewall/GetPveFirewallGroupCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Firewall/GetPveFirewallGroupCmdlet.cs @@ -12,7 +12,7 @@ namespace PSProxmoxVE.Cmdlets.Firewall [Parameter(Mandatory = false, Position = 0, HelpMessage = "The security group name. If specified, returns rules within the group.")] public string? Group { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); var service = new FirewallService(); diff --git a/src/PSProxmoxVE/Cmdlets/Firewall/GetPveFirewallIpSetCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Firewall/GetPveFirewallIpSetCmdlet.cs index ad92a53..2d6105f 100644 --- a/src/PSProxmoxVE/Cmdlets/Firewall/GetPveFirewallIpSetCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Firewall/GetPveFirewallIpSetCmdlet.cs @@ -24,7 +24,7 @@ namespace PSProxmoxVE.Cmdlets.Firewall [Parameter(Mandatory = false, HelpMessage = "Optional IP set name to filter by.")] public string? Name { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var level = Level; if (!FirewallScope.TryValidate(level, Node, VmId, null, out var scopeErrorId, out var scopeMessage)) diff --git a/src/PSProxmoxVE/Cmdlets/Firewall/GetPveFirewallIpSetEntryCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Firewall/GetPveFirewallIpSetEntryCmdlet.cs index 6b7d860..c9879d8 100644 --- a/src/PSProxmoxVE/Cmdlets/Firewall/GetPveFirewallIpSetEntryCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Firewall/GetPveFirewallIpSetEntryCmdlet.cs @@ -22,7 +22,7 @@ namespace PSProxmoxVE.Cmdlets.Firewall [Parameter(Mandatory = true, HelpMessage = "The IP set name.")] public string Name { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var level = Level; if (!FirewallScope.TryValidate(level, Node, VmId, null, out var scopeErrorId, out var scopeMessage)) diff --git a/src/PSProxmoxVE/Cmdlets/Firewall/GetPveFirewallOptionsCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Firewall/GetPveFirewallOptionsCmdlet.cs index ea7b238..fde5e07 100644 --- a/src/PSProxmoxVE/Cmdlets/Firewall/GetPveFirewallOptionsCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Firewall/GetPveFirewallOptionsCmdlet.cs @@ -19,7 +19,7 @@ namespace PSProxmoxVE.Cmdlets.Firewall [ValidateRange(100, 999999999)] public int? VmId { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var level = Level; if (!FirewallScope.TryValidate(level, Node, VmId, null, out var scopeErrorId, out var scopeMessage)) diff --git a/src/PSProxmoxVE/Cmdlets/Firewall/GetPveFirewallRefCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Firewall/GetPveFirewallRefCmdlet.cs index 55ab7b0..1ee269c 100644 --- a/src/PSProxmoxVE/Cmdlets/Firewall/GetPveFirewallRefCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Firewall/GetPveFirewallRefCmdlet.cs @@ -22,7 +22,7 @@ namespace PSProxmoxVE.Cmdlets.Firewall [Parameter(Mandatory = false, HelpMessage = "Optional type filter for references.")] public string? Type { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var level = Level; if (!FirewallScope.TryValidate(level, Node, VmId, null, out var scopeErrorId, out var scopeMessage)) diff --git a/src/PSProxmoxVE/Cmdlets/Firewall/GetPveFirewallRuleCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Firewall/GetPveFirewallRuleCmdlet.cs index 0d822c5..1405495 100644 --- a/src/PSProxmoxVE/Cmdlets/Firewall/GetPveFirewallRuleCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Firewall/GetPveFirewallRuleCmdlet.cs @@ -27,7 +27,7 @@ namespace PSProxmoxVE.Cmdlets.Firewall [Parameter(Mandatory = false, HelpMessage = "Optional rule position to filter by.")] public int? Position { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var level = Level; if (!FirewallScope.TryValidate(level, Node, VmId, Group, out var scopeErrorId, out var scopeMessage)) diff --git a/src/PSProxmoxVE/Cmdlets/Firewall/NewPveFirewallAliasCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Firewall/NewPveFirewallAliasCmdlet.cs index 220baac..6d91108 100644 --- a/src/PSProxmoxVE/Cmdlets/Firewall/NewPveFirewallAliasCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Firewall/NewPveFirewallAliasCmdlet.cs @@ -28,7 +28,7 @@ namespace PSProxmoxVE.Cmdlets.Firewall [Parameter(Mandatory = false, HelpMessage = "Optional comment for the alias.")] public string? Comment { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var level = Level; if (!FirewallScope.TryValidate(level, Node, VmId, null, out var scopeErrorId, out var scopeMessage)) diff --git a/src/PSProxmoxVE/Cmdlets/Firewall/NewPveFirewallGroupCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Firewall/NewPveFirewallGroupCmdlet.cs index 47d76ff..cab42f8 100644 --- a/src/PSProxmoxVE/Cmdlets/Firewall/NewPveFirewallGroupCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Firewall/NewPveFirewallGroupCmdlet.cs @@ -15,7 +15,7 @@ namespace PSProxmoxVE.Cmdlets.Firewall [Parameter(Mandatory = false, HelpMessage = "Optional comment for the security group.")] public string? Comment { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"firewall security group '{Group}'", "Create")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Firewall/NewPveFirewallIpSetCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Firewall/NewPveFirewallIpSetCmdlet.cs index 0556ff5..a6c639f 100644 --- a/src/PSProxmoxVE/Cmdlets/Firewall/NewPveFirewallIpSetCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Firewall/NewPveFirewallIpSetCmdlet.cs @@ -25,7 +25,7 @@ namespace PSProxmoxVE.Cmdlets.Firewall [Parameter(Mandatory = false, HelpMessage = "Optional comment for the IP set.")] public string? Comment { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var level = Level; if (!FirewallScope.TryValidate(level, Node, VmId, null, out var scopeErrorId, out var scopeMessage)) diff --git a/src/PSProxmoxVE/Cmdlets/Firewall/NewPveFirewallIpSetEntryCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Firewall/NewPveFirewallIpSetEntryCmdlet.cs index 0e0f20e..ef50d54 100644 --- a/src/PSProxmoxVE/Cmdlets/Firewall/NewPveFirewallIpSetEntryCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Firewall/NewPveFirewallIpSetEntryCmdlet.cs @@ -31,7 +31,7 @@ namespace PSProxmoxVE.Cmdlets.Firewall [Parameter(Mandatory = false, HelpMessage = "Optional comment for the entry.")] public string? Comment { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var level = Level; if (!FirewallScope.TryValidate(level, Node, VmId, null, out var scopeErrorId, out var scopeMessage)) diff --git a/src/PSProxmoxVE/Cmdlets/Firewall/NewPveFirewallRuleCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Firewall/NewPveFirewallRuleCmdlet.cs index 3d321f1..6348be7 100644 --- a/src/PSProxmoxVE/Cmdlets/Firewall/NewPveFirewallRuleCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Firewall/NewPveFirewallRuleCmdlet.cs @@ -62,7 +62,7 @@ namespace PSProxmoxVE.Cmdlets.Firewall [Parameter(Mandatory = false, HelpMessage = "Network interface.")] public string? Iface { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var level = Level; if (!FirewallScope.TryValidate(level, Node, VmId, Group, out var scopeErrorId, out var scopeMessage)) diff --git a/src/PSProxmoxVE/Cmdlets/Firewall/RemovePveFirewallAliasCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Firewall/RemovePveFirewallAliasCmdlet.cs index 5591ad2..c6f119d 100644 --- a/src/PSProxmoxVE/Cmdlets/Firewall/RemovePveFirewallAliasCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Firewall/RemovePveFirewallAliasCmdlet.cs @@ -22,7 +22,7 @@ namespace PSProxmoxVE.Cmdlets.Firewall [Parameter(Mandatory = true, HelpMessage = "The alias name to remove.")] public string Name { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var level = Level; if (!FirewallScope.TryValidate(level, Node, VmId, null, out var scopeErrorId, out var scopeMessage)) diff --git a/src/PSProxmoxVE/Cmdlets/Firewall/RemovePveFirewallGroupCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Firewall/RemovePveFirewallGroupCmdlet.cs index 9b0413f..1e396ac 100644 --- a/src/PSProxmoxVE/Cmdlets/Firewall/RemovePveFirewallGroupCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Firewall/RemovePveFirewallGroupCmdlet.cs @@ -12,7 +12,7 @@ namespace PSProxmoxVE.Cmdlets.Firewall [Parameter(Mandatory = true, Position = 0, HelpMessage = "The security group name to remove.")] public string Group { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"firewall security group '{Group}'", "Remove")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Firewall/RemovePveFirewallIpSetCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Firewall/RemovePveFirewallIpSetCmdlet.cs index e2af61e..45e4d75 100644 --- a/src/PSProxmoxVE/Cmdlets/Firewall/RemovePveFirewallIpSetCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Firewall/RemovePveFirewallIpSetCmdlet.cs @@ -22,7 +22,7 @@ namespace PSProxmoxVE.Cmdlets.Firewall [Parameter(Mandatory = true, HelpMessage = "The IP set name to remove.")] public string Name { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var level = Level; if (!FirewallScope.TryValidate(level, Node, VmId, null, out var scopeErrorId, out var scopeMessage)) diff --git a/src/PSProxmoxVE/Cmdlets/Firewall/RemovePveFirewallIpSetEntryCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Firewall/RemovePveFirewallIpSetEntryCmdlet.cs index a2e95a9..17cfbde 100644 --- a/src/PSProxmoxVE/Cmdlets/Firewall/RemovePveFirewallIpSetEntryCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Firewall/RemovePveFirewallIpSetEntryCmdlet.cs @@ -25,7 +25,7 @@ namespace PSProxmoxVE.Cmdlets.Firewall [Parameter(Mandatory = true, HelpMessage = "The CIDR network address to remove.")] public string Cidr { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var level = Level; if (!FirewallScope.TryValidate(level, Node, VmId, null, out var scopeErrorId, out var scopeMessage)) diff --git a/src/PSProxmoxVE/Cmdlets/Firewall/RemovePveFirewallRuleCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Firewall/RemovePveFirewallRuleCmdlet.cs index 3c289e4..ce76d37 100644 --- a/src/PSProxmoxVE/Cmdlets/Firewall/RemovePveFirewallRuleCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Firewall/RemovePveFirewallRuleCmdlet.cs @@ -26,7 +26,7 @@ namespace PSProxmoxVE.Cmdlets.Firewall [Parameter(Mandatory = true, HelpMessage = "The rule position to remove.")] public int Position { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var level = Level; if (!FirewallScope.TryValidate(level, Node, VmId, Group, out var scopeErrorId, out var scopeMessage)) diff --git a/src/PSProxmoxVE/Cmdlets/Firewall/SetPveFirewallAliasCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Firewall/SetPveFirewallAliasCmdlet.cs index 582f79c..d9e1413 100644 --- a/src/PSProxmoxVE/Cmdlets/Firewall/SetPveFirewallAliasCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Firewall/SetPveFirewallAliasCmdlet.cs @@ -28,7 +28,7 @@ namespace PSProxmoxVE.Cmdlets.Firewall [Parameter(Mandatory = false, HelpMessage = "Updated comment for the alias.")] public string? Comment { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var level = Level; if (!FirewallScope.TryValidate(level, Node, VmId, null, out var scopeErrorId, out var scopeMessage)) diff --git a/src/PSProxmoxVE/Cmdlets/Firewall/SetPveFirewallIpSetEntryCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Firewall/SetPveFirewallIpSetEntryCmdlet.cs index 504e15b..8afa2dc 100644 --- a/src/PSProxmoxVE/Cmdlets/Firewall/SetPveFirewallIpSetEntryCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Firewall/SetPveFirewallIpSetEntryCmdlet.cs @@ -31,7 +31,7 @@ namespace PSProxmoxVE.Cmdlets.Firewall [Parameter(Mandatory = false, HelpMessage = "Updated comment for the entry.")] public string? Comment { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var level = Level; if (!FirewallScope.TryValidate(level, Node, VmId, null, out var scopeErrorId, out var scopeMessage)) diff --git a/src/PSProxmoxVE/Cmdlets/Firewall/SetPveFirewallOptionsCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Firewall/SetPveFirewallOptionsCmdlet.cs index 947ad9d..617ed70 100644 --- a/src/PSProxmoxVE/Cmdlets/Firewall/SetPveFirewallOptionsCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Firewall/SetPveFirewallOptionsCmdlet.cs @@ -49,7 +49,7 @@ namespace PSProxmoxVE.Cmdlets.Firewall [Parameter(Mandatory = false, HelpMessage = "Enable IP filter.")] public SwitchParameter IpFilter { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var level = Level; if (!FirewallScope.TryValidate(level, Node, VmId, null, out var scopeErrorId, out var scopeMessage)) diff --git a/src/PSProxmoxVE/Cmdlets/Firewall/SetPveFirewallRuleCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Firewall/SetPveFirewallRuleCmdlet.cs index de2e880..45374d7 100644 --- a/src/PSProxmoxVE/Cmdlets/Firewall/SetPveFirewallRuleCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Firewall/SetPveFirewallRuleCmdlet.cs @@ -65,7 +65,7 @@ namespace PSProxmoxVE.Cmdlets.Firewall [Parameter(Mandatory = false, HelpMessage = "Network interface.")] public string? Iface { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var level = Level; if (!FirewallScope.TryValidate(level, Node, VmId, Group, out var scopeErrorId, out var scopeMessage)) diff --git a/src/PSProxmoxVE/Cmdlets/HA/GetPveHaGroupCmdlet.cs b/src/PSProxmoxVE/Cmdlets/HA/GetPveHaGroupCmdlet.cs index eab7fab..c981feb 100644 --- a/src/PSProxmoxVE/Cmdlets/HA/GetPveHaGroupCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/HA/GetPveHaGroupCmdlet.cs @@ -20,7 +20,7 @@ namespace PSProxmoxVE.Cmdlets.HA HelpMessage = "HA group name. Omit to list all groups.")] public string? Group { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); var service = new HaService(); diff --git a/src/PSProxmoxVE/Cmdlets/HA/GetPveHaResourceCmdlet.cs b/src/PSProxmoxVE/Cmdlets/HA/GetPveHaResourceCmdlet.cs index 9318125..6f35531 100644 --- a/src/PSProxmoxVE/Cmdlets/HA/GetPveHaResourceCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/HA/GetPveHaResourceCmdlet.cs @@ -21,7 +21,7 @@ namespace PSProxmoxVE.Cmdlets.HA HelpMessage = "Service ID (e.g. 'vm:100', 'ct:200'). Omit to list all.")] public string? Sid { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); var service = new HaService(); diff --git a/src/PSProxmoxVE/Cmdlets/HA/GetPveHaRuleCmdlet.cs b/src/PSProxmoxVE/Cmdlets/HA/GetPveHaRuleCmdlet.cs index a7395ed..d188bfb 100644 --- a/src/PSProxmoxVE/Cmdlets/HA/GetPveHaRuleCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/HA/GetPveHaRuleCmdlet.cs @@ -20,7 +20,7 @@ namespace PSProxmoxVE.Cmdlets.HA HelpMessage = "HA rule ID. Omit to list all rules.")] public string? Rule { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); RequireVersion(session, "HA Rules", 9, 0); diff --git a/src/PSProxmoxVE/Cmdlets/HA/GetPveHaStatusCmdlet.cs b/src/PSProxmoxVE/Cmdlets/HA/GetPveHaStatusCmdlet.cs index 586b302..3e30f51 100644 --- a/src/PSProxmoxVE/Cmdlets/HA/GetPveHaStatusCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/HA/GetPveHaStatusCmdlet.cs @@ -15,7 +15,7 @@ namespace PSProxmoxVE.Cmdlets.HA [OutputType(typeof(PveHaStatus))] public sealed class GetPveHaStatusCmdlet : PveCmdletBase { - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); var service = new HaService(); diff --git a/src/PSProxmoxVE/Cmdlets/HA/MovePveHaResourceCmdlet.cs b/src/PSProxmoxVE/Cmdlets/HA/MovePveHaResourceCmdlet.cs index 413fb39..7f4bff7 100644 --- a/src/PSProxmoxVE/Cmdlets/HA/MovePveHaResourceCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/HA/MovePveHaResourceCmdlet.cs @@ -30,7 +30,7 @@ namespace PSProxmoxVE.Cmdlets.HA [ValidateSet("Migrate", "Relocate")] public string Mode { get; set; } = "Migrate"; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"HA resource '{Sid}' to node '{Node}'", $"{Mode}")) return; diff --git a/src/PSProxmoxVE/Cmdlets/HA/NewPveHaGroupCmdlet.cs b/src/PSProxmoxVE/Cmdlets/HA/NewPveHaGroupCmdlet.cs index 21dd425..5dbde1c 100644 --- a/src/PSProxmoxVE/Cmdlets/HA/NewPveHaGroupCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/HA/NewPveHaGroupCmdlet.cs @@ -35,7 +35,7 @@ namespace PSProxmoxVE.Cmdlets.HA [Parameter(Mandatory = false, HelpMessage = "Description or comment.")] public string? Comment { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"HA group '{Group}'", "Create")) return; diff --git a/src/PSProxmoxVE/Cmdlets/HA/NewPveHaResourceCmdlet.cs b/src/PSProxmoxVE/Cmdlets/HA/NewPveHaResourceCmdlet.cs index a20781d..ae8f7f9 100644 --- a/src/PSProxmoxVE/Cmdlets/HA/NewPveHaResourceCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/HA/NewPveHaResourceCmdlet.cs @@ -42,7 +42,7 @@ namespace PSProxmoxVE.Cmdlets.HA [Parameter(Mandatory = false, HelpMessage = "Description or comment.")] public string? Comment { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"HA resource '{Sid}'", "Create")) return; diff --git a/src/PSProxmoxVE/Cmdlets/HA/NewPveHaRuleCmdlet.cs b/src/PSProxmoxVE/Cmdlets/HA/NewPveHaRuleCmdlet.cs index ad53281..221d290 100644 --- a/src/PSProxmoxVE/Cmdlets/HA/NewPveHaRuleCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/HA/NewPveHaRuleCmdlet.cs @@ -31,7 +31,7 @@ namespace PSProxmoxVE.Cmdlets.HA [Parameter(Mandatory = false, HelpMessage = "Additional rule properties.")] public System.Collections.Hashtable? Properties { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); RequireVersion(session, "HA Rules", 9, 0); diff --git a/src/PSProxmoxVE/Cmdlets/HA/RemovePveHaGroupCmdlet.cs b/src/PSProxmoxVE/Cmdlets/HA/RemovePveHaGroupCmdlet.cs index 121b70b..d028993 100644 --- a/src/PSProxmoxVE/Cmdlets/HA/RemovePveHaGroupCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/HA/RemovePveHaGroupCmdlet.cs @@ -20,7 +20,7 @@ namespace PSProxmoxVE.Cmdlets.HA HelpMessage = "HA group name to delete.")] public string Group { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"HA group '{Group}'", "Delete")) return; diff --git a/src/PSProxmoxVE/Cmdlets/HA/RemovePveHaResourceCmdlet.cs b/src/PSProxmoxVE/Cmdlets/HA/RemovePveHaResourceCmdlet.cs index c6897de..53b3e4b 100644 --- a/src/PSProxmoxVE/Cmdlets/HA/RemovePveHaResourceCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/HA/RemovePveHaResourceCmdlet.cs @@ -20,7 +20,7 @@ namespace PSProxmoxVE.Cmdlets.HA HelpMessage = "Service ID (e.g. 'vm:100', 'ct:200').")] public string Sid { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"HA resource '{Sid}'", "Remove from HA management")) return; diff --git a/src/PSProxmoxVE/Cmdlets/HA/RemovePveHaRuleCmdlet.cs b/src/PSProxmoxVE/Cmdlets/HA/RemovePveHaRuleCmdlet.cs index c722297..b1fbe2f 100644 --- a/src/PSProxmoxVE/Cmdlets/HA/RemovePveHaRuleCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/HA/RemovePveHaRuleCmdlet.cs @@ -19,7 +19,7 @@ namespace PSProxmoxVE.Cmdlets.HA HelpMessage = "HA rule ID to delete.")] public string Rule { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); RequireVersion(session, "HA Rules", 9, 0); diff --git a/src/PSProxmoxVE/Cmdlets/HA/SetPveHaGroupCmdlet.cs b/src/PSProxmoxVE/Cmdlets/HA/SetPveHaGroupCmdlet.cs index 69ac363..e79fa52 100644 --- a/src/PSProxmoxVE/Cmdlets/HA/SetPveHaGroupCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/HA/SetPveHaGroupCmdlet.cs @@ -37,7 +37,7 @@ namespace PSProxmoxVE.Cmdlets.HA [Parameter(Mandatory = false, HelpMessage = "Description or comment.")] public string? Comment { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"HA group '{Group}'", "Update")) return; diff --git a/src/PSProxmoxVE/Cmdlets/HA/SetPveHaResourceCmdlet.cs b/src/PSProxmoxVE/Cmdlets/HA/SetPveHaResourceCmdlet.cs index 9c3b0a5..df804b2 100644 --- a/src/PSProxmoxVE/Cmdlets/HA/SetPveHaResourceCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/HA/SetPveHaResourceCmdlet.cs @@ -43,7 +43,7 @@ namespace PSProxmoxVE.Cmdlets.HA [Parameter(Mandatory = false, HelpMessage = "Description or comment.")] public string? Comment { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"HA resource '{Sid}'", "Update")) return; diff --git a/src/PSProxmoxVE/Cmdlets/HA/SetPveHaRuleCmdlet.cs b/src/PSProxmoxVE/Cmdlets/HA/SetPveHaRuleCmdlet.cs index 4f6f181..f4b9658 100644 --- a/src/PSProxmoxVE/Cmdlets/HA/SetPveHaRuleCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/HA/SetPveHaRuleCmdlet.cs @@ -36,7 +36,7 @@ namespace PSProxmoxVE.Cmdlets.HA [Parameter(Mandatory = false, HelpMessage = "Additional rule properties.")] public System.Collections.Hashtable? Properties { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); RequireVersion(session, "HA Rules", 9, 0); diff --git a/src/PSProxmoxVE/Cmdlets/Network/GetPveNetworkCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Network/GetPveNetworkCmdlet.cs index 4ad82a2..2c5a720 100644 --- a/src/PSProxmoxVE/Cmdlets/Network/GetPveNetworkCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Network/GetPveNetworkCmdlet.cs @@ -32,7 +32,7 @@ namespace PSProxmoxVE.Cmdlets.Network "OVSPort", "OVSIntPort", "any_bridge", "any_local_bridge", IgnoreCase = true)] public string? Type { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); diff --git a/src/PSProxmoxVE/Cmdlets/Network/GetPveSdnControllerCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Network/GetPveSdnControllerCmdlet.cs index 12b689f..668adda 100644 --- a/src/PSProxmoxVE/Cmdlets/Network/GetPveSdnControllerCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Network/GetPveSdnControllerCmdlet.cs @@ -20,7 +20,7 @@ namespace PSProxmoxVE.Cmdlets.Network [Parameter(Mandatory = false, Position = 0, HelpMessage = "Filter by controller identifier.")] public string? Controller { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); RequireVersion(session, "SDN IPAM/DNS/Controller", 6, 2, 8, 1); diff --git a/src/PSProxmoxVE/Cmdlets/Network/GetPveSdnDnsCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Network/GetPveSdnDnsCmdlet.cs index 0404e3d..6e03c94 100644 --- a/src/PSProxmoxVE/Cmdlets/Network/GetPveSdnDnsCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Network/GetPveSdnDnsCmdlet.cs @@ -20,7 +20,7 @@ namespace PSProxmoxVE.Cmdlets.Network [Parameter(Mandatory = false, Position = 0, HelpMessage = "Filter by DNS plugin identifier.")] public string? Dns { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); RequireVersion(session, "SDN IPAM/DNS/Controller", 6, 2, 8, 1); diff --git a/src/PSProxmoxVE/Cmdlets/Network/GetPveSdnIpamCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Network/GetPveSdnIpamCmdlet.cs index eaef110..0b566f6 100644 --- a/src/PSProxmoxVE/Cmdlets/Network/GetPveSdnIpamCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Network/GetPveSdnIpamCmdlet.cs @@ -20,7 +20,7 @@ namespace PSProxmoxVE.Cmdlets.Network [Parameter(Mandatory = false, Position = 0, HelpMessage = "Filter by IPAM plugin identifier.")] public string? Ipam { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); RequireVersion(session, "SDN IPAM/DNS/Controller", 6, 2, 8, 1); diff --git a/src/PSProxmoxVE/Cmdlets/Network/GetPveSdnSubnetCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Network/GetPveSdnSubnetCmdlet.cs index 6186720..c43a242 100644 --- a/src/PSProxmoxVE/Cmdlets/Network/GetPveSdnSubnetCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Network/GetPveSdnSubnetCmdlet.cs @@ -23,7 +23,7 @@ namespace PSProxmoxVE.Cmdlets.Network [Parameter(Mandatory = false, HelpMessage = "Filter by subnet CIDR (e.g. 10.0.0.0/24).")] public string? Subnet { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); RequireVersion(session, "SDN", 6, 2, 8, 0); diff --git a/src/PSProxmoxVE/Cmdlets/Network/GetPveSdnVnetCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Network/GetPveSdnVnetCmdlet.cs index ebc9995..c018b59 100644 --- a/src/PSProxmoxVE/Cmdlets/Network/GetPveSdnVnetCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Network/GetPveSdnVnetCmdlet.cs @@ -23,7 +23,7 @@ namespace PSProxmoxVE.Cmdlets.Network [Parameter(Mandatory = false, HelpMessage = "The SDN VNet name.")] public string? Vnet { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); RequireVersion(session, "SDN", 6, 2, 8, 0); diff --git a/src/PSProxmoxVE/Cmdlets/Network/GetPveSdnZoneCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Network/GetPveSdnZoneCmdlet.cs index 625080d..2b7bcb8 100644 --- a/src/PSProxmoxVE/Cmdlets/Network/GetPveSdnZoneCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Network/GetPveSdnZoneCmdlet.cs @@ -18,7 +18,7 @@ namespace PSProxmoxVE.Cmdlets.Network [Parameter(Mandatory = false, Position = 0, HelpMessage = "The SDN zone name.")] public string? Zone { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); RequireVersion(session, "SDN", 6, 2, 8, 0); diff --git a/src/PSProxmoxVE/Cmdlets/Network/InvokePveNetworkApplyCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Network/InvokePveNetworkApplyCmdlet.cs index 60ce305..44d2203 100644 --- a/src/PSProxmoxVE/Cmdlets/Network/InvokePveNetworkApplyCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Network/InvokePveNetworkApplyCmdlet.cs @@ -24,7 +24,7 @@ namespace PSProxmoxVE.Cmdlets.Network [Parameter(Mandatory = false, HelpMessage = "Wait for the task to complete before returning.")] public SwitchParameter Wait { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess(Node, "Apply PVE Network Configuration")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Network/InvokePveSdnApplyCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Network/InvokePveSdnApplyCmdlet.cs index 981e2cb..07c956d 100644 --- a/src/PSProxmoxVE/Cmdlets/Network/InvokePveSdnApplyCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Network/InvokePveSdnApplyCmdlet.cs @@ -14,7 +14,7 @@ namespace PSProxmoxVE.Cmdlets.Network [OutputType(typeof(void))] public sealed class InvokePveSdnApplyCmdlet : PveCmdletBase { - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess("SDN configuration", "Apply pending changes")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Network/NewPveNetworkCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Network/NewPveNetworkCmdlet.cs index 2696158..2a05cbe 100644 --- a/src/PSProxmoxVE/Cmdlets/Network/NewPveNetworkCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Network/NewPveNetworkCmdlet.cs @@ -69,7 +69,7 @@ namespace PSProxmoxVE.Cmdlets.Network [Parameter(Mandatory = false, HelpMessage = "Comments or notes for this interface.")] public string? Comments { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"{Iface} on {Node}", "Create PVE Network Iface")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Network/NewPveSdnControllerCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Network/NewPveSdnControllerCmdlet.cs index 76f4cf9..12aab7a 100644 --- a/src/PSProxmoxVE/Cmdlets/Network/NewPveSdnControllerCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Network/NewPveSdnControllerCmdlet.cs @@ -36,7 +36,7 @@ namespace PSProxmoxVE.Cmdlets.Network [Parameter(Mandatory = false, HelpMessage = "The node this controller is configured on.")] public string? Node { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"SDN Controller '{Controller}'", "Create PVE SDN Controller")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Network/NewPveSdnDnsCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Network/NewPveSdnDnsCmdlet.cs index 143f73d..b7c7579 100644 --- a/src/PSProxmoxVE/Cmdlets/Network/NewPveSdnDnsCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Network/NewPveSdnDnsCmdlet.cs @@ -40,7 +40,7 @@ namespace PSProxmoxVE.Cmdlets.Network [Parameter(Mandatory = false, HelpMessage = "The TTL (time-to-live) for DNS records.")] public int? Ttl { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"SDN DNS '{Dns}'", "Create PVE SDN DNS")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Network/NewPveSdnIpamCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Network/NewPveSdnIpamCmdlet.cs index 9d2fd75..c74d9b1 100644 --- a/src/PSProxmoxVE/Cmdlets/Network/NewPveSdnIpamCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Network/NewPveSdnIpamCmdlet.cs @@ -36,7 +36,7 @@ namespace PSProxmoxVE.Cmdlets.Network [Parameter(Mandatory = false, HelpMessage = "The configuration section identifier.")] public int? Section { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"SDN IPAM '{Ipam}'", "Create PVE SDN IPAM")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Network/NewPveSdnSubnetCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Network/NewPveSdnSubnetCmdlet.cs index aa4bbd7..be52ccf 100644 --- a/src/PSProxmoxVE/Cmdlets/Network/NewPveSdnSubnetCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Network/NewPveSdnSubnetCmdlet.cs @@ -40,7 +40,7 @@ namespace PSProxmoxVE.Cmdlets.Network [Parameter(Mandatory = false, HelpMessage = "DHCP range for automatic IP assignment.")] public string? DhcpRange { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"Subnet {Subnet} on VNet {Vnet}", "Create PVE SDN Subnet")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Network/NewPveSdnVnetCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Network/NewPveSdnVnetCmdlet.cs index df17a9d..b5f9e31 100644 --- a/src/PSProxmoxVE/Cmdlets/Network/NewPveSdnVnetCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Network/NewPveSdnVnetCmdlet.cs @@ -36,7 +36,7 @@ namespace PSProxmoxVE.Cmdlets.Network [Parameter(Mandatory = false, HelpMessage = "Enable VLAN awareness on this VNet.")] public SwitchParameter VlanAware { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"{Vnet} in zone {Zone}", "Create PVE SDN VNet")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Network/NewPveSdnZoneCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Network/NewPveSdnZoneCmdlet.cs index bc1429c..7108bdb 100644 --- a/src/PSProxmoxVE/Cmdlets/Network/NewPveSdnZoneCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Network/NewPveSdnZoneCmdlet.cs @@ -52,7 +52,7 @@ namespace PSProxmoxVE.Cmdlets.Network [Parameter(Mandatory = false, HelpMessage = "IPAM plugin to use.")] public string? Ipam { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess(Zone, "Create PVE SDN Zone")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Network/RemovePveNetworkCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Network/RemovePveNetworkCmdlet.cs index 0b484d1..8db2b7b 100644 --- a/src/PSProxmoxVE/Cmdlets/Network/RemovePveNetworkCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Network/RemovePveNetworkCmdlet.cs @@ -22,7 +22,7 @@ namespace PSProxmoxVE.Cmdlets.Network [Parameter(Mandatory = true, Position = 1, HelpMessage = "The network interface name.")] public string Iface { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"{Iface} on {Node}", "Remove PVE Network Iface")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Network/RemovePveSdnControllerCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Network/RemovePveSdnControllerCmdlet.cs index 0705468..a30b416 100644 --- a/src/PSProxmoxVE/Cmdlets/Network/RemovePveSdnControllerCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Network/RemovePveSdnControllerCmdlet.cs @@ -18,7 +18,7 @@ namespace PSProxmoxVE.Cmdlets.Network [Parameter(Mandatory = true, Position = 0, ValueFromPipelineByPropertyName = true, HelpMessage = "The controller identifier to remove.")] public string Controller { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"SDN Controller '{Controller}'", "Remove PVE SDN Controller")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Network/RemovePveSdnDnsCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Network/RemovePveSdnDnsCmdlet.cs index 33233be..7e12d74 100644 --- a/src/PSProxmoxVE/Cmdlets/Network/RemovePveSdnDnsCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Network/RemovePveSdnDnsCmdlet.cs @@ -18,7 +18,7 @@ namespace PSProxmoxVE.Cmdlets.Network [Parameter(Mandatory = true, Position = 0, ValueFromPipelineByPropertyName = true, HelpMessage = "The DNS plugin identifier to remove.")] public string Dns { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"SDN DNS '{Dns}'", "Remove PVE SDN DNS")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Network/RemovePveSdnIpamCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Network/RemovePveSdnIpamCmdlet.cs index f56a766..df99ea5 100644 --- a/src/PSProxmoxVE/Cmdlets/Network/RemovePveSdnIpamCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Network/RemovePveSdnIpamCmdlet.cs @@ -18,7 +18,7 @@ namespace PSProxmoxVE.Cmdlets.Network [Parameter(Mandatory = true, Position = 0, ValueFromPipelineByPropertyName = true, HelpMessage = "The IPAM plugin identifier to remove.")] public string Ipam { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"SDN IPAM '{Ipam}'", "Remove PVE SDN IPAM")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Network/RemovePveSdnSubnetCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Network/RemovePveSdnSubnetCmdlet.cs index 226b28e..1a3ca49 100644 --- a/src/PSProxmoxVE/Cmdlets/Network/RemovePveSdnSubnetCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Network/RemovePveSdnSubnetCmdlet.cs @@ -23,7 +23,7 @@ namespace PSProxmoxVE.Cmdlets.Network [Parameter(Mandatory = true, Position = 1, ValueFromPipelineByPropertyName = true, HelpMessage = "The subnet CIDR to remove.")] public string Subnet { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"Subnet {Subnet} on VNet {Vnet}", "Remove PVE SDN Subnet")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Network/RemovePveSdnVnetCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Network/RemovePveSdnVnetCmdlet.cs index 82092b8..e85194c 100644 --- a/src/PSProxmoxVE/Cmdlets/Network/RemovePveSdnVnetCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Network/RemovePveSdnVnetCmdlet.cs @@ -18,7 +18,7 @@ namespace PSProxmoxVE.Cmdlets.Network [ValidatePattern(@"\A[A-Za-z0-9][A-Za-z0-9._-]*\z")] public string Vnet { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess(Vnet, "Remove PVE SDN VNet")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Network/RemovePveSdnZoneCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Network/RemovePveSdnZoneCmdlet.cs index 785277c..42bd472 100644 --- a/src/PSProxmoxVE/Cmdlets/Network/RemovePveSdnZoneCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Network/RemovePveSdnZoneCmdlet.cs @@ -19,7 +19,7 @@ namespace PSProxmoxVE.Cmdlets.Network [ValidatePattern(@"\A[A-Za-z0-9][A-Za-z0-9._-]*\z")] public string Zone { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess(Zone, "Remove PVE SDN Zone")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Network/SetPveNetworkCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Network/SetPveNetworkCmdlet.cs index 097c90c..b3c20cb 100644 --- a/src/PSProxmoxVE/Cmdlets/Network/SetPveNetworkCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Network/SetPveNetworkCmdlet.cs @@ -75,7 +75,7 @@ namespace PSProxmoxVE.Cmdlets.Network [Parameter(Mandatory = false, HelpMessage = "Comments or notes for this interface.")] public string? Comments { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"{Iface} on {Node}", "Set PVE Network Iface")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Network/SetPveSdnControllerCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Network/SetPveSdnControllerCmdlet.cs index 41b905b..de6ef5b 100644 --- a/src/PSProxmoxVE/Cmdlets/Network/SetPveSdnControllerCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Network/SetPveSdnControllerCmdlet.cs @@ -31,7 +31,7 @@ namespace PSProxmoxVE.Cmdlets.Network [Parameter(Mandatory = false, HelpMessage = "The node this controller is configured on.")] public string? Node { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess(Controller, "Set PVE SDN Controller")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Network/SetPveSdnDnsCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Network/SetPveSdnDnsCmdlet.cs index d7d06e4..ebe5c1f 100644 --- a/src/PSProxmoxVE/Cmdlets/Network/SetPveSdnDnsCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Network/SetPveSdnDnsCmdlet.cs @@ -35,7 +35,7 @@ namespace PSProxmoxVE.Cmdlets.Network [Parameter(Mandatory = false, HelpMessage = "The TTL for DNS records.")] public int? Ttl { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess(Dns, "Set PVE SDN DNS")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Network/SetPveSdnIpamCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Network/SetPveSdnIpamCmdlet.cs index a5ce42f..75cd420 100644 --- a/src/PSProxmoxVE/Cmdlets/Network/SetPveSdnIpamCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Network/SetPveSdnIpamCmdlet.cs @@ -31,7 +31,7 @@ namespace PSProxmoxVE.Cmdlets.Network [Parameter(Mandatory = false, HelpMessage = "The section ID in the IPAM server.")] public int? Section { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess(Ipam, "Set PVE SDN IPAM")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Network/SetPveSdnSubnetCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Network/SetPveSdnSubnetCmdlet.cs index 4e15119..40af57e 100644 --- a/src/PSProxmoxVE/Cmdlets/Network/SetPveSdnSubnetCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Network/SetPveSdnSubnetCmdlet.cs @@ -39,7 +39,7 @@ namespace PSProxmoxVE.Cmdlets.Network [Parameter(Mandatory = false, HelpMessage = "DHCP range for this subnet.")] public string? DhcpRange { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess(Subnet, "Set PVE SDN Subnet")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Network/SetPveSdnVnetCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Network/SetPveSdnVnetCmdlet.cs index 1c5ca21..44c390d 100644 --- a/src/PSProxmoxVE/Cmdlets/Network/SetPveSdnVnetCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Network/SetPveSdnVnetCmdlet.cs @@ -35,7 +35,7 @@ namespace PSProxmoxVE.Cmdlets.Network [Parameter(Mandatory = false, HelpMessage = "Enable VLAN-aware bridging.")] public SwitchParameter VlanAware { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess(Vnet, "Set PVE SDN VNet")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Network/SetPveSdnZoneCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Network/SetPveSdnZoneCmdlet.cs index 74a1469..79f7429 100644 --- a/src/PSProxmoxVE/Cmdlets/Network/SetPveSdnZoneCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Network/SetPveSdnZoneCmdlet.cs @@ -31,7 +31,7 @@ namespace PSProxmoxVE.Cmdlets.Network [Parameter(Mandatory = false, HelpMessage = "DNS zone name for registration.")] public string? DnsZone { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess(Zone, "Set PVE SDN Zone")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Nodes/GetPveNodeCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Nodes/GetPveNodeCmdlet.cs index 5953116..89345ef 100644 --- a/src/PSProxmoxVE/Cmdlets/Nodes/GetPveNodeCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Nodes/GetPveNodeCmdlet.cs @@ -22,7 +22,7 @@ namespace PSProxmoxVE.Cmdlets.Nodes [ValidateNotNullOrEmpty] public string? Name { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); diff --git a/src/PSProxmoxVE/Cmdlets/Nodes/GetPveNodeConfigCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Nodes/GetPveNodeConfigCmdlet.cs index 856d05b..89be9ef 100644 --- a/src/PSProxmoxVE/Cmdlets/Nodes/GetPveNodeConfigCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Nodes/GetPveNodeConfigCmdlet.cs @@ -19,7 +19,7 @@ namespace PSProxmoxVE.Cmdlets.Nodes [ValidateNotNullOrEmpty] public string Node { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); var service = new NodeService(); diff --git a/src/PSProxmoxVE/Cmdlets/Nodes/GetPveNodeDnsCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Nodes/GetPveNodeDnsCmdlet.cs index f5857d8..a3d2ba3 100644 --- a/src/PSProxmoxVE/Cmdlets/Nodes/GetPveNodeDnsCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Nodes/GetPveNodeDnsCmdlet.cs @@ -19,7 +19,7 @@ namespace PSProxmoxVE.Cmdlets.Nodes [ValidateNotNullOrEmpty] public string Node { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); var service = new NodeService(); diff --git a/src/PSProxmoxVE/Cmdlets/Nodes/GetPveNodeStatusCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Nodes/GetPveNodeStatusCmdlet.cs index 7fc73d9..fc44a22 100644 --- a/src/PSProxmoxVE/Cmdlets/Nodes/GetPveNodeStatusCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Nodes/GetPveNodeStatusCmdlet.cs @@ -24,7 +24,7 @@ namespace PSProxmoxVE.Cmdlets.Nodes [ValidateNotNullOrEmpty] public string Node { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); diff --git a/src/PSProxmoxVE/Cmdlets/Nodes/SetPveNodeConfigCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Nodes/SetPveNodeConfigCmdlet.cs index 14961d4..09f04b8 100644 --- a/src/PSProxmoxVE/Cmdlets/Nodes/SetPveNodeConfigCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Nodes/SetPveNodeConfigCmdlet.cs @@ -28,7 +28,7 @@ namespace PSProxmoxVE.Cmdlets.Nodes [Parameter(Mandatory = false, HelpMessage = "Wake-on-LAN configuration.")] public string? Wakeonlan { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess(Node, "Set PVE Node Config")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Nodes/SetPveNodeDnsCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Nodes/SetPveNodeDnsCmdlet.cs index 05edd06..9b5e660 100644 --- a/src/PSProxmoxVE/Cmdlets/Nodes/SetPveNodeDnsCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Nodes/SetPveNodeDnsCmdlet.cs @@ -37,7 +37,7 @@ namespace PSProxmoxVE.Cmdlets.Nodes [Parameter(Mandatory = false, HelpMessage = "Tertiary DNS server address.")] public string? Dns3 { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess(Node, "Set PVE Node DNS")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Nodes/StartPveNodeVmsCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Nodes/StartPveNodeVmsCmdlet.cs index 35df044..80d584b 100644 --- a/src/PSProxmoxVE/Cmdlets/Nodes/StartPveNodeVmsCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Nodes/StartPveNodeVmsCmdlet.cs @@ -25,7 +25,7 @@ namespace PSProxmoxVE.Cmdlets.Nodes [Parameter(Mandatory = false, HelpMessage = "Comma-separated list of VM IDs to start.")] public string? VmIds { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess(Node, "Start all VMs")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Nodes/StopPveNodeVmsCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Nodes/StopPveNodeVmsCmdlet.cs index 6e32fc8..7b531a8 100644 --- a/src/PSProxmoxVE/Cmdlets/Nodes/StopPveNodeVmsCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Nodes/StopPveNodeVmsCmdlet.cs @@ -31,7 +31,7 @@ namespace PSProxmoxVE.Cmdlets.Nodes [Parameter(Mandatory = false, HelpMessage = "Force stop VMs without waiting for graceful shutdown.")] public SwitchParameter ForceStop { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess(Node, "Stop all VMs")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Pools/GetPvePoolCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Pools/GetPvePoolCmdlet.cs index ddaf285..fdb36ec 100644 --- a/src/PSProxmoxVE/Cmdlets/Pools/GetPvePoolCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Pools/GetPvePoolCmdlet.cs @@ -21,7 +21,7 @@ namespace PSProxmoxVE.Cmdlets.Pools [Parameter(Mandatory = false, Position = 0, ValueFromPipelineByPropertyName = true, HelpMessage = "The pool ID to retrieve.")] public string? PoolId { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); var service = new PoolService(); diff --git a/src/PSProxmoxVE/Cmdlets/Pools/NewPvePoolCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Pools/NewPvePoolCmdlet.cs index a85f88a..f18812f 100644 --- a/src/PSProxmoxVE/Cmdlets/Pools/NewPvePoolCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Pools/NewPvePoolCmdlet.cs @@ -26,7 +26,7 @@ namespace PSProxmoxVE.Cmdlets.Pools [Parameter(Mandatory = false, HelpMessage = "An optional comment or description for the pool.")] public string? Comment { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"pool '{PoolId}'", "New-PvePool")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Pools/RemovePvePoolCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Pools/RemovePvePoolCmdlet.cs index 5f7fa99..559a772 100644 --- a/src/PSProxmoxVE/Cmdlets/Pools/RemovePvePoolCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Pools/RemovePvePoolCmdlet.cs @@ -22,7 +22,7 @@ namespace PSProxmoxVE.Cmdlets.Pools [Parameter(Mandatory = true, Position = 0, ValueFromPipelineByPropertyName = true, HelpMessage = "The pool ID to remove.")] public string PoolId { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"pool '{PoolId}'", "Remove-PvePool")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Pools/SetPvePoolCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Pools/SetPvePoolCmdlet.cs index cbc5dfd..865d818 100644 --- a/src/PSProxmoxVE/Cmdlets/Pools/SetPvePoolCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Pools/SetPvePoolCmdlet.cs @@ -39,7 +39,7 @@ namespace PSProxmoxVE.Cmdlets.Pools [Parameter(Mandatory = false, HelpMessage = "Comma-separated list of members to remove.")] public string? Delete { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"pool '{PoolId}'", "Set-PvePool")) return; diff --git a/src/PSProxmoxVE/Cmdlets/PveCmdletBase.cs b/src/PSProxmoxVE/Cmdlets/PveCmdletBase.cs index 7e2fd63..ec14290 100644 --- a/src/PSProxmoxVE/Cmdlets/PveCmdletBase.cs +++ b/src/PSProxmoxVE/Cmdlets/PveCmdletBase.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Management.Automation; using PSProxmoxVE.Core.Authentication; using PSProxmoxVE.Core.Client; +using PSProxmoxVE.Core.Errors; using PSProxmoxVE.Core.Exceptions; using PSProxmoxVE.Core.Models.Vms; using PSProxmoxVE.Core.Services; @@ -23,6 +24,60 @@ namespace PSProxmoxVE.Cmdlets [Parameter(Mandatory = false)] public PveSession? Session { get; set; } + /// + /// Runs and reports any module exception that escapes it + /// as a mapped terminating error, so a 403, a 404 and an unreachable server are + /// distinguishable by $_.CategoryInfo and $_.FullyQualifiedErrorId. + /// + protected sealed override void ProcessRecord() + { + try + { + ProcessPveRecord(); + } + catch (Exception ex) when (PveErrorMapper.IsRecognized(ex)) + { + ThrowTerminatingError(ToPveErrorRecord(ex, null)); + } + } + + /// The cmdlet's per-record work. Overrides 's body. + protected abstract void ProcessPveRecord(); + + /// + /// Builds the for , classifying it + /// with . + /// + /// The failure to report. + /// + /// The object the failure is about. When null, the target is derived from the exception + /// (the API resource, or the task UPID). + /// + /// The error record to write or throw. + protected ErrorRecord ToPveErrorRecord(Exception exception, object? target) + { + var descriptor = PveErrorMapper.Describe(exception); + return new ErrorRecord( + exception, + descriptor.ErrorId, + ToErrorCategory(descriptor.Kind), + target ?? descriptor.Target); + } + + private static ErrorCategory ToErrorCategory(PveErrorKind kind) => kind switch + { + PveErrorKind.PermissionDenied => ErrorCategory.PermissionDenied, + PveErrorKind.AuthenticationError => ErrorCategory.AuthenticationError, + PveErrorKind.ObjectNotFound => ErrorCategory.ObjectNotFound, + PveErrorKind.InvalidArgument => ErrorCategory.InvalidArgument, + PveErrorKind.OperationTimeout => ErrorCategory.OperationTimeout, + PveErrorKind.ConnectionError => ErrorCategory.ConnectionError, + PveErrorKind.ResourceUnavailable => ErrorCategory.ResourceUnavailable, + PveErrorKind.InvalidOperation => ErrorCategory.InvalidOperation, + PveErrorKind.OperationStopped => ErrorCategory.OperationStopped, + _ => ErrorCategory.NotSpecified, + }; + /// /// Returns the session to use for this cmdlet. /// Resolution order: -Session parameter → ModuleState.ActiveSession. @@ -74,10 +129,8 @@ namespace PSProxmoxVE.Cmdlets // Hard fail: endpoint does not exist if (!version.IsAtLeast(introducedMajor, introducedMinor)) { - ThrowTerminatingError(new ErrorRecord( + ThrowTerminatingError(ToPveErrorRecord( new PveVersionException(introducedMajor, introducedMinor, version), - "PveVersionTooOld", - ErrorCategory.InvalidOperation, null)); return; } diff --git a/src/PSProxmoxVE/Cmdlets/Snapshots/GetPveSnapshotCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Snapshots/GetPveSnapshotCmdlet.cs index 6619870..aef1ff5 100644 --- a/src/PSProxmoxVE/Cmdlets/Snapshots/GetPveSnapshotCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Snapshots/GetPveSnapshotCmdlet.cs @@ -31,7 +31,7 @@ namespace PSProxmoxVE.Cmdlets.Snapshots [Parameter(Mandatory = false, HelpMessage = "Filter by snapshot name.")] public string? Name { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); diff --git a/src/PSProxmoxVE/Cmdlets/Snapshots/NewPveSnapshotCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Snapshots/NewPveSnapshotCmdlet.cs index 6dc0345..9e34488 100644 --- a/src/PSProxmoxVE/Cmdlets/Snapshots/NewPveSnapshotCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Snapshots/NewPveSnapshotCmdlet.cs @@ -40,7 +40,7 @@ namespace PSProxmoxVE.Cmdlets.Snapshots [Parameter(Mandatory = false, HelpMessage = "Wait for the task to complete before returning.")] public SwitchParameter Wait { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"VM {VmId} on {Node}", $"Create snapshot '{Name}'")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Snapshots/RemovePveSnapshotCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Snapshots/RemovePveSnapshotCmdlet.cs index 1ed5146..a7d05fc 100644 --- a/src/PSProxmoxVE/Cmdlets/Snapshots/RemovePveSnapshotCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Snapshots/RemovePveSnapshotCmdlet.cs @@ -34,7 +34,7 @@ namespace PSProxmoxVE.Cmdlets.Snapshots [Parameter(Mandatory = false, HelpMessage = "Wait for the task to complete before returning.")] public SwitchParameter Wait { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); diff --git a/src/PSProxmoxVE/Cmdlets/Snapshots/RestorePveSnapshotCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Snapshots/RestorePveSnapshotCmdlet.cs index 480c168..6967f8a 100644 --- a/src/PSProxmoxVE/Cmdlets/Snapshots/RestorePveSnapshotCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Snapshots/RestorePveSnapshotCmdlet.cs @@ -37,7 +37,7 @@ namespace PSProxmoxVE.Cmdlets.Snapshots [Parameter(Mandatory = false, HelpMessage = "Wait for the task to complete before returning.")] public SwitchParameter Wait { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); diff --git a/src/PSProxmoxVE/Cmdlets/Storage/GetPveStorageCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Storage/GetPveStorageCmdlet.cs index df2260e..2ee9e07 100644 --- a/src/PSProxmoxVE/Cmdlets/Storage/GetPveStorageCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Storage/GetPveStorageCmdlet.cs @@ -37,7 +37,7 @@ namespace PSProxmoxVE.Cmdlets.Storage [Parameter(Mandatory = false, HelpMessage = "Filter by content type (e.g. iso, backup).")] public string? ContentType { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); diff --git a/src/PSProxmoxVE/Cmdlets/Storage/GetPveStorageContentCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Storage/GetPveStorageContentCmdlet.cs index a0ee963..c4d10ef 100644 --- a/src/PSProxmoxVE/Cmdlets/Storage/GetPveStorageContentCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Storage/GetPveStorageContentCmdlet.cs @@ -29,7 +29,7 @@ namespace PSProxmoxVE.Cmdlets.Storage [Parameter(Mandatory = false, HelpMessage = "Filter by content type (e.g. iso, vztmpl, backup).")] public string? ContentType { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); diff --git a/src/PSProxmoxVE/Cmdlets/Storage/GetPveStorageStatusCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Storage/GetPveStorageStatusCmdlet.cs index e05ea60..bb644ac 100644 --- a/src/PSProxmoxVE/Cmdlets/Storage/GetPveStorageStatusCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Storage/GetPveStorageStatusCmdlet.cs @@ -25,7 +25,7 @@ namespace PSProxmoxVE.Cmdlets.Storage [ValidateNotNullOrEmpty] public string Storage { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); var service = new StorageService(); diff --git a/src/PSProxmoxVE/Cmdlets/Storage/InvokePveStorageDownloadCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Storage/InvokePveStorageDownloadCmdlet.cs index 0cc524a..43c0653 100644 --- a/src/PSProxmoxVE/Cmdlets/Storage/InvokePveStorageDownloadCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Storage/InvokePveStorageDownloadCmdlet.cs @@ -51,7 +51,7 @@ namespace PSProxmoxVE.Cmdlets.Storage [ValidateRange(0, int.MaxValue)] public int? TimeoutSeconds { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"{Node}/{Storage}/{Filename}", $"Download from {Url}")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Storage/NewPveStorageCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Storage/NewPveStorageCmdlet.cs index 1ef8335..6ba2edc 100644 --- a/src/PSProxmoxVE/Cmdlets/Storage/NewPveStorageCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Storage/NewPveStorageCmdlet.cs @@ -89,7 +89,7 @@ namespace PSProxmoxVE.Cmdlets.Storage data[key] = value!; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess(Storage, "Create PVE Storage")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Storage/NewPveStorageDiskCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Storage/NewPveStorageDiskCmdlet.cs index 99468da..ae3d1c3 100644 --- a/src/PSProxmoxVE/Cmdlets/Storage/NewPveStorageDiskCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Storage/NewPveStorageDiskCmdlet.cs @@ -41,7 +41,7 @@ namespace PSProxmoxVE.Cmdlets.Storage [ValidateSet("raw", "qcow2", "vmdk", IgnoreCase = true)] public string? Format { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"{Filename} ({Size})", "New PVE Storage Disk")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Storage/RemovePveStorageCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Storage/RemovePveStorageCmdlet.cs index 6e347cf..23a1630 100644 --- a/src/PSProxmoxVE/Cmdlets/Storage/RemovePveStorageCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Storage/RemovePveStorageCmdlet.cs @@ -21,7 +21,7 @@ namespace PSProxmoxVE.Cmdlets.Storage [ValidatePattern(@"\A[A-Za-z0-9][A-Za-z0-9._-]*\z")] public string Storage { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess(Storage, "Remove PVE Storage")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Storage/RemovePveStorageContentCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Storage/RemovePveStorageContentCmdlet.cs index 79525d8..a9bef59 100644 --- a/src/PSProxmoxVE/Cmdlets/Storage/RemovePveStorageContentCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Storage/RemovePveStorageContentCmdlet.cs @@ -31,7 +31,7 @@ namespace PSProxmoxVE.Cmdlets.Storage [ValidateNotNullOrEmpty] public string Volume { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess(Volume, "Remove PVE Storage Content")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Storage/SendPveFileCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Storage/SendPveFileCmdlet.cs index b4173bd..9d4349c 100644 --- a/src/PSProxmoxVE/Cmdlets/Storage/SendPveFileCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Storage/SendPveFileCmdlet.cs @@ -67,7 +67,7 @@ namespace PSProxmoxVE.Cmdlets.Storage [ValidateRange(0, int.MaxValue)] public int? TimeoutSeconds { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var fileName = System.IO.Path.GetFileName(Path); if (!ShouldProcess($"{Node}/{Storage}/{fileName}", $"Upload file (content={ContentType})")) diff --git a/src/PSProxmoxVE/Cmdlets/Storage/SetPveStorageCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Storage/SetPveStorageCmdlet.cs index 19c3c67..14c7474 100644 --- a/src/PSProxmoxVE/Cmdlets/Storage/SetPveStorageCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Storage/SetPveStorageCmdlet.cs @@ -38,7 +38,7 @@ namespace PSProxmoxVE.Cmdlets.Storage [Parameter(Mandatory = false, HelpMessage = "Additional configuration parameters as a hashtable.")] public System.Collections.Hashtable? AdditionalConfig { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"storage '{Storage}'", "Set")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Storage/SetPveStorageContentCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Storage/SetPveStorageContentCmdlet.cs index 5d8c71a..b8be510 100644 --- a/src/PSProxmoxVE/Cmdlets/Storage/SetPveStorageContentCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Storage/SetPveStorageContentCmdlet.cs @@ -34,7 +34,7 @@ namespace PSProxmoxVE.Cmdlets.Storage [Parameter(Mandatory = false, HelpMessage = "Notes or description for the volume.")] public string? Notes { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess(Volume, "Set PVE Storage Content")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Tasks/GetPveTaskCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Tasks/GetPveTaskCmdlet.cs index a2968d8..763fa8d 100644 --- a/src/PSProxmoxVE/Cmdlets/Tasks/GetPveTaskCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Tasks/GetPveTaskCmdlet.cs @@ -25,7 +25,7 @@ namespace PSProxmoxVE.Cmdlets.Tasks [Parameter(Mandatory = true, Position = 1, ValueFromPipelineByPropertyName = true, HelpMessage = "The task UPID.")] public string Upid { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); diff --git a/src/PSProxmoxVE/Cmdlets/Tasks/GetPveTaskListCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Tasks/GetPveTaskListCmdlet.cs index 5c7562a..ff8f9ce 100644 --- a/src/PSProxmoxVE/Cmdlets/Tasks/GetPveTaskListCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Tasks/GetPveTaskListCmdlet.cs @@ -49,7 +49,7 @@ namespace PSProxmoxVE.Cmdlets.Tasks [ValidateRange(1, 10000)] public int Limit { get; set; } = 50; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); var service = new TaskService(); diff --git a/src/PSProxmoxVE/Cmdlets/Tasks/StopPveTaskCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Tasks/StopPveTaskCmdlet.cs index ab61379..8d8719b 100644 --- a/src/PSProxmoxVE/Cmdlets/Tasks/StopPveTaskCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Tasks/StopPveTaskCmdlet.cs @@ -28,7 +28,7 @@ namespace PSProxmoxVE.Cmdlets.Tasks [Parameter(Mandatory = true, Position = 1, ValueFromPipelineByPropertyName = true, HelpMessage = "The task UPID.")] public string Upid { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"task '{Upid}' on node '{Node}'", "Stop-PveTask")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Tasks/WaitPveTaskCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Tasks/WaitPveTaskCmdlet.cs index 37c4570..b371175 100644 --- a/src/PSProxmoxVE/Cmdlets/Tasks/WaitPveTaskCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Tasks/WaitPveTaskCmdlet.cs @@ -52,7 +52,7 @@ namespace PSProxmoxVE.Cmdlets.Tasks [Parameter(Mandatory = false, HelpMessage = "How often to poll task status.")] public TimeSpan? PollInterval { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); using var client = new PveHttpClient(session); diff --git a/src/PSProxmoxVE/Cmdlets/Templates/GetPveTemplateCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Templates/GetPveTemplateCmdlet.cs index ec406b2..5121b88 100644 --- a/src/PSProxmoxVE/Cmdlets/Templates/GetPveTemplateCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Templates/GetPveTemplateCmdlet.cs @@ -23,7 +23,7 @@ namespace PSProxmoxVE.Cmdlets.Templates [Parameter(Mandatory = false, HelpMessage = "Filter by template name (supports wildcards).")] public string? Name { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); var service = new TemplateService(); diff --git a/src/PSProxmoxVE/Cmdlets/Templates/NewPveTemplateCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Templates/NewPveTemplateCmdlet.cs index 9bc6a45..eddae57 100644 --- a/src/PSProxmoxVE/Cmdlets/Templates/NewPveTemplateCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Templates/NewPveTemplateCmdlet.cs @@ -29,7 +29,7 @@ namespace PSProxmoxVE.Cmdlets.Templates [Parameter(Mandatory = false, HelpMessage = "Wait for the task to complete before returning.")] public SwitchParameter Wait { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); diff --git a/src/PSProxmoxVE/Cmdlets/Templates/NewPveVmFromTemplateCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Templates/NewPveVmFromTemplateCmdlet.cs index f808f76..09d4043 100644 --- a/src/PSProxmoxVE/Cmdlets/Templates/NewPveVmFromTemplateCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Templates/NewPveVmFromTemplateCmdlet.cs @@ -55,7 +55,7 @@ namespace PSProxmoxVE.Cmdlets.Templates [Parameter(Mandatory = false, HelpMessage = "Wait for the task to complete before returning.")] public SwitchParameter Wait { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"Template {VmId} -> new VM {NewVmId}", "Clone PVE VM from Template")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Templates/RemovePveTemplateCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Templates/RemovePveTemplateCmdlet.cs index f63a07d..f9a4d2b 100644 --- a/src/PSProxmoxVE/Cmdlets/Templates/RemovePveTemplateCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Templates/RemovePveTemplateCmdlet.cs @@ -34,7 +34,7 @@ namespace PSProxmoxVE.Cmdlets.Templates [Parameter(Mandatory = false, HelpMessage = "Wait for the task to complete before returning.")] public SwitchParameter Wait { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"Template {VmId} on {Node}", "Remove PVE Template (all disks will be deleted)")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Users/GetPveApiTokenCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Users/GetPveApiTokenCmdlet.cs index 966b3a9..bb6a3a0 100644 --- a/src/PSProxmoxVE/Cmdlets/Users/GetPveApiTokenCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Users/GetPveApiTokenCmdlet.cs @@ -28,7 +28,7 @@ namespace PSProxmoxVE.Cmdlets.Users [Parameter(Mandatory = false, Position = 1, HelpMessage = "The API token identifier.")] public string? TokenId { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); diff --git a/src/PSProxmoxVE/Cmdlets/Users/GetPveDomainCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Users/GetPveDomainCmdlet.cs index a7a05d4..fb3b727 100644 --- a/src/PSProxmoxVE/Cmdlets/Users/GetPveDomainCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Users/GetPveDomainCmdlet.cs @@ -20,7 +20,7 @@ namespace PSProxmoxVE.Cmdlets.Users [Parameter(Mandatory = false, Position = 0, ValueFromPipelineByPropertyName = true, HelpMessage = "Optional realm name to filter results.")] public string? Realm { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); var service = new UserService(); diff --git a/src/PSProxmoxVE/Cmdlets/Users/GetPveGroupCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Users/GetPveGroupCmdlet.cs index e0e5849..0ee6fe7 100644 --- a/src/PSProxmoxVE/Cmdlets/Users/GetPveGroupCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Users/GetPveGroupCmdlet.cs @@ -20,7 +20,7 @@ namespace PSProxmoxVE.Cmdlets.Users [Parameter(Mandatory = false, Position = 0, ValueFromPipelineByPropertyName = true, HelpMessage = "Optional group ID to filter results.")] public string? GroupId { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); var service = new UserService(); diff --git a/src/PSProxmoxVE/Cmdlets/Users/GetPvePermissionCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Users/GetPvePermissionCmdlet.cs index 6630dbe..198ff97 100644 --- a/src/PSProxmoxVE/Cmdlets/Users/GetPvePermissionCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Users/GetPvePermissionCmdlet.cs @@ -25,7 +25,7 @@ namespace PSProxmoxVE.Cmdlets.Users [Parameter(Mandatory = false, HelpMessage = "The user ID in user@realm format.")] public string? UserId { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); diff --git a/src/PSProxmoxVE/Cmdlets/Users/GetPveRoleCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Users/GetPveRoleCmdlet.cs index 1a0fb65..4f4d6ec 100644 --- a/src/PSProxmoxVE/Cmdlets/Users/GetPveRoleCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Users/GetPveRoleCmdlet.cs @@ -19,7 +19,7 @@ namespace PSProxmoxVE.Cmdlets.Users [Parameter(Mandatory = false, Position = 0, HelpMessage = "The role identifier.")] public string? RoleId { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); diff --git a/src/PSProxmoxVE/Cmdlets/Users/GetPveUserCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Users/GetPveUserCmdlet.cs index 0fe34ba..51f0a58 100644 --- a/src/PSProxmoxVE/Cmdlets/Users/GetPveUserCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Users/GetPveUserCmdlet.cs @@ -27,7 +27,7 @@ namespace PSProxmoxVE.Cmdlets.Users [Alias("EnabledOnly")] public SwitchParameter Enabled { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); diff --git a/src/PSProxmoxVE/Cmdlets/Users/NewPveApiTokenCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Users/NewPveApiTokenCmdlet.cs index f574388..da73e39 100644 --- a/src/PSProxmoxVE/Cmdlets/Users/NewPveApiTokenCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Users/NewPveApiTokenCmdlet.cs @@ -46,7 +46,7 @@ namespace PSProxmoxVE.Cmdlets.Users [Parameter(Mandatory = false, HelpMessage = "Enable token privilege separation.")] public SwitchParameter PrivilegeSeparation { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var fullTokenId = $"{UserId}!{TokenId}"; if (!ShouldProcess(fullTokenId, "Create PVE API Token")) diff --git a/src/PSProxmoxVE/Cmdlets/Users/NewPveDomainCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Users/NewPveDomainCmdlet.cs index 8231c31..dad91e1 100644 --- a/src/PSProxmoxVE/Cmdlets/Users/NewPveDomainCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Users/NewPveDomainCmdlet.cs @@ -33,7 +33,7 @@ namespace PSProxmoxVE.Cmdlets.Users [Parameter(Mandatory = false, HelpMessage = "Set as the default authentication domain.")] public SwitchParameter Default { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess(Realm, "Create PVE Domain")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Users/NewPveGroupCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Users/NewPveGroupCmdlet.cs index c7fcb6e..db4cdee 100644 --- a/src/PSProxmoxVE/Cmdlets/Users/NewPveGroupCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Users/NewPveGroupCmdlet.cs @@ -23,7 +23,7 @@ namespace PSProxmoxVE.Cmdlets.Users [Parameter(Mandatory = false, HelpMessage = "Comment or description for the group.")] public string? Comment { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess(GroupId, "Create PVE Group")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Users/NewPveRoleCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Users/NewPveRoleCmdlet.cs index 81bad71..b305143 100644 --- a/src/PSProxmoxVE/Cmdlets/Users/NewPveRoleCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Users/NewPveRoleCmdlet.cs @@ -25,7 +25,7 @@ namespace PSProxmoxVE.Cmdlets.Users [Parameter(Mandatory = false, Position = 1, HelpMessage = "Comma-separated list of privileges.")] public string? Privileges { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess(RoleId, "Create PVE Role")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Users/NewPveUserCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Users/NewPveUserCmdlet.cs index 3b59dc0..f51b1a4 100644 --- a/src/PSProxmoxVE/Cmdlets/Users/NewPveUserCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Users/NewPveUserCmdlet.cs @@ -49,7 +49,7 @@ namespace PSProxmoxVE.Cmdlets.Users [Parameter(Mandatory = false, HelpMessage = "Account expiry as a Unix timestamp.")] public long? Expire { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess(UserId, "Create PVE User")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Users/RemovePveApiTokenCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Users/RemovePveApiTokenCmdlet.cs index ebccc4c..cf3f287 100644 --- a/src/PSProxmoxVE/Cmdlets/Users/RemovePveApiTokenCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Users/RemovePveApiTokenCmdlet.cs @@ -29,7 +29,7 @@ namespace PSProxmoxVE.Cmdlets.Users [Parameter(Mandatory = true, Position = 1, ValueFromPipelineByPropertyName = true, HelpMessage = "The API token identifier.")] public string TokenId { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); diff --git a/src/PSProxmoxVE/Cmdlets/Users/RemovePveDomainCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Users/RemovePveDomainCmdlet.cs index b5c606c..6e6825f 100644 --- a/src/PSProxmoxVE/Cmdlets/Users/RemovePveDomainCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Users/RemovePveDomainCmdlet.cs @@ -21,7 +21,7 @@ namespace PSProxmoxVE.Cmdlets.Users [ValidateNotNullOrEmpty] public string Realm { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess(Realm, "Remove PVE Domain")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Users/RemovePveGroupCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Users/RemovePveGroupCmdlet.cs index 817d227..e7a7d43 100644 --- a/src/PSProxmoxVE/Cmdlets/Users/RemovePveGroupCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Users/RemovePveGroupCmdlet.cs @@ -20,7 +20,7 @@ namespace PSProxmoxVE.Cmdlets.Users [ValidateNotNullOrEmpty] public string GroupId { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess(GroupId, "Remove PVE Group")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Users/RemovePveRoleCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Users/RemovePveRoleCmdlet.cs index e7080b1..9fe9531 100644 --- a/src/PSProxmoxVE/Cmdlets/Users/RemovePveRoleCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Users/RemovePveRoleCmdlet.cs @@ -18,7 +18,7 @@ namespace PSProxmoxVE.Cmdlets.Users [Parameter(Mandatory = true, Position = 0, ValueFromPipelineByPropertyName = true, HelpMessage = "The role identifier.")] public string RoleId { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess(RoleId, "Remove PVE Role")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Users/RemovePveUserCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Users/RemovePveUserCmdlet.cs index f3a4a8a..e39f8ed 100644 --- a/src/PSProxmoxVE/Cmdlets/Users/RemovePveUserCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Users/RemovePveUserCmdlet.cs @@ -17,7 +17,7 @@ namespace PSProxmoxVE.Cmdlets.Users [Parameter(Mandatory = true, Position = 0, ValueFromPipelineByPropertyName = true, HelpMessage = "The user ID in user@realm format.")] public string UserId { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess(UserId, "Remove PVE User")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Users/SetPveApiTokenCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Users/SetPveApiTokenCmdlet.cs index fedc502..05842ae 100644 --- a/src/PSProxmoxVE/Cmdlets/Users/SetPveApiTokenCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Users/SetPveApiTokenCmdlet.cs @@ -35,7 +35,7 @@ namespace PSProxmoxVE.Cmdlets.Users [Parameter(Mandatory = false, HelpMessage = "Whether the token uses privilege separation.")] public SwitchParameter PrivilegeSeparation { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"API token '{UserId}!{TokenId}'", "Set")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Users/SetPveDomainCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Users/SetPveDomainCmdlet.cs index 2876eb5..121f437 100644 --- a/src/PSProxmoxVE/Cmdlets/Users/SetPveDomainCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Users/SetPveDomainCmdlet.cs @@ -28,7 +28,7 @@ namespace PSProxmoxVE.Cmdlets.Users [Parameter(Mandatory = false, HelpMessage = "Set as the default authentication domain.")] public SwitchParameter Default { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess(Realm, "Set PVE Domain")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Users/SetPveGroupCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Users/SetPveGroupCmdlet.cs index 7cd0517..30a88f7 100644 --- a/src/PSProxmoxVE/Cmdlets/Users/SetPveGroupCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Users/SetPveGroupCmdlet.cs @@ -23,7 +23,7 @@ namespace PSProxmoxVE.Cmdlets.Users [Parameter(Mandatory = false, HelpMessage = "Updated comment or description for the group.")] public string? Comment { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess(GroupId, "Set PVE Group")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Users/SetPvePasswordCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Users/SetPvePasswordCmdlet.cs index 738e813..eb26cb4 100644 --- a/src/PSProxmoxVE/Cmdlets/Users/SetPvePasswordCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Users/SetPvePasswordCmdlet.cs @@ -24,7 +24,7 @@ namespace PSProxmoxVE.Cmdlets.Users [Parameter(Mandatory = true, Position = 1, HelpMessage = "The new password for the user.")] public System.Security.SecureString Password { get; set; } = new System.Security.SecureString(); - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess(UserId, "Set PVE Password")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Users/SetPvePermissionCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Users/SetPvePermissionCmdlet.cs index df21ffe..f195270 100644 --- a/src/PSProxmoxVE/Cmdlets/Users/SetPvePermissionCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Users/SetPvePermissionCmdlet.cs @@ -40,7 +40,7 @@ namespace PSProxmoxVE.Cmdlets.Users [Parameter(Mandatory = false, HelpMessage = "Remove the ACL entry instead of adding it.")] public SwitchParameter Delete { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var action = Delete.IsPresent ? "Remove" : "Set"; if (!ShouldProcess($"{Type} '{UgId}' at '{Path}'", $"{action} PVE Permission ({Role})")) diff --git a/src/PSProxmoxVE/Cmdlets/Users/SetPveRoleCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Users/SetPveRoleCmdlet.cs index 20dd445..c60bbad 100644 --- a/src/PSProxmoxVE/Cmdlets/Users/SetPveRoleCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Users/SetPveRoleCmdlet.cs @@ -21,7 +21,7 @@ namespace PSProxmoxVE.Cmdlets.Users [Parameter(Mandatory = true, Position = 1, HelpMessage = "Comma-separated list of privileges (e.g. 'VM.Audit,VM.Console').")] public string Privileges { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"role '{RoleId}'", "Set")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Users/SetPveUserCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Users/SetPveUserCmdlet.cs index 7ae19ee..b7b154b 100644 --- a/src/PSProxmoxVE/Cmdlets/Users/SetPveUserCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Users/SetPveUserCmdlet.cs @@ -52,7 +52,7 @@ namespace PSProxmoxVE.Cmdlets.Users [Parameter(Mandatory = false, HelpMessage = "Enable or disable the user account.")] public bool? Enable { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess(UserId, "Set PVE User")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Vms/CopyPveVmCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Vms/CopyPveVmCmdlet.cs index 4180937..25475d9 100644 --- a/src/PSProxmoxVE/Cmdlets/Vms/CopyPveVmCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Vms/CopyPveVmCmdlet.cs @@ -70,7 +70,7 @@ namespace PSProxmoxVE.Cmdlets.Vms [Parameter(Mandatory = false, HelpMessage = "Wait for the task to complete before returning.")] public SwitchParameter Wait { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var target = TargetNode ?? SourceNode; if (!ShouldProcess($"VM {VmId} on node '{SourceNode}' to new VM on node '{target}'", "Copy-PveVm")) diff --git a/src/PSProxmoxVE/Cmdlets/Vms/GetPveVmCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Vms/GetPveVmCmdlet.cs index 7e1a325..6efa60f 100644 --- a/src/PSProxmoxVE/Cmdlets/Vms/GetPveVmCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Vms/GetPveVmCmdlet.cs @@ -68,7 +68,7 @@ namespace PSProxmoxVE.Cmdlets.Vms [Parameter(Mandatory = false, HelpMessage = "Include detailed status (QmpStatus) via per-VM API call.")] public SwitchParameter Detailed { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); diff --git a/src/PSProxmoxVE/Cmdlets/Vms/GetPveVmConfigCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Vms/GetPveVmConfigCmdlet.cs index 3adfe85..32ac87e 100644 --- a/src/PSProxmoxVE/Cmdlets/Vms/GetPveVmConfigCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Vms/GetPveVmConfigCmdlet.cs @@ -30,7 +30,7 @@ namespace PSProxmoxVE.Cmdlets.Vms [ValidateRange(100, 999999999)] public int VmId { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); var vmService = new VmService(); diff --git a/src/PSProxmoxVE/Cmdlets/Vms/GetPveVmGuestFsInfoCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Vms/GetPveVmGuestFsInfoCmdlet.cs index 00c21ad..477b067 100644 --- a/src/PSProxmoxVE/Cmdlets/Vms/GetPveVmGuestFsInfoCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Vms/GetPveVmGuestFsInfoCmdlet.cs @@ -25,7 +25,7 @@ namespace PSProxmoxVE.Cmdlets.Vms [ValidateRange(100, 999999999)] public int VmId { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); diff --git a/src/PSProxmoxVE/Cmdlets/Vms/GetPveVmGuestNetworkCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Vms/GetPveVmGuestNetworkCmdlet.cs index 229b1fd..7701d30 100644 --- a/src/PSProxmoxVE/Cmdlets/Vms/GetPveVmGuestNetworkCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Vms/GetPveVmGuestNetworkCmdlet.cs @@ -25,7 +25,7 @@ namespace PSProxmoxVE.Cmdlets.Vms [ValidateRange(100, 999999999)] public int VmId { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); diff --git a/src/PSProxmoxVE/Cmdlets/Vms/GetPveVmGuestOsInfoCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Vms/GetPveVmGuestOsInfoCmdlet.cs index 7c557e6..7e61b2d 100644 --- a/src/PSProxmoxVE/Cmdlets/Vms/GetPveVmGuestOsInfoCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Vms/GetPveVmGuestOsInfoCmdlet.cs @@ -25,7 +25,7 @@ namespace PSProxmoxVE.Cmdlets.Vms [ValidateRange(100, 999999999)] public int VmId { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); diff --git a/src/PSProxmoxVE/Cmdlets/Vms/ImportPveOvaCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Vms/ImportPveOvaCmdlet.cs index 10898fa..6c9ca18 100644 --- a/src/PSProxmoxVE/Cmdlets/Vms/ImportPveOvaCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Vms/ImportPveOvaCmdlet.cs @@ -90,7 +90,7 @@ namespace PSProxmoxVE.Cmdlets.Vms [ValidateRange(0, int.MaxValue)] public int? TimeoutSeconds { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { // Validate the OVA file exists if (!File.Exists(Path)) diff --git a/src/PSProxmoxVE/Cmdlets/Vms/ImportPveVmDiskCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Vms/ImportPveVmDiskCmdlet.cs index 82b5854..6ff574f 100644 --- a/src/PSProxmoxVE/Cmdlets/Vms/ImportPveVmDiskCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Vms/ImportPveVmDiskCmdlet.cs @@ -70,7 +70,7 @@ namespace PSProxmoxVE.Cmdlets.Vms [Parameter(Mandatory = false, HelpMessage = "Wait for the import task to complete.")] public SwitchParameter Wait { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"VM {VmId} disk {Disk} on node '{Node}'", $"Import disk from '{Source}' to '{TargetStorage}'")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Vms/InvokePveVmGuestExecCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Vms/InvokePveVmGuestExecCmdlet.cs index 1c1d523..a0510f0 100644 --- a/src/PSProxmoxVE/Cmdlets/Vms/InvokePveVmGuestExecCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Vms/InvokePveVmGuestExecCmdlet.cs @@ -40,7 +40,7 @@ namespace PSProxmoxVE.Cmdlets.Vms [ValidateRange(1, 3600)] public int Timeout { get; set; } = 300; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"VM {VmId} on node '{Node}'", $"Execute guest command: {Command}")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Vms/InvokePveVmGuestFsTrimCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Vms/InvokePveVmGuestFsTrimCmdlet.cs index cadfc1b..c5cc4cb 100644 --- a/src/PSProxmoxVE/Cmdlets/Vms/InvokePveVmGuestFsTrimCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Vms/InvokePveVmGuestFsTrimCmdlet.cs @@ -24,7 +24,7 @@ namespace PSProxmoxVE.Cmdlets.Vms [ValidateRange(100, 999999999)] public int VmId { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"VM {VmId} on node '{Node}'", "Invoke-PveVmGuestFsTrim")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Vms/MovePveVmCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Vms/MovePveVmCmdlet.cs index 383efe5..773324c 100644 --- a/src/PSProxmoxVE/Cmdlets/Vms/MovePveVmCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Vms/MovePveVmCmdlet.cs @@ -52,7 +52,7 @@ namespace PSProxmoxVE.Cmdlets.Vms [Parameter(Mandatory = false, HelpMessage = "Wait for the task to complete before returning.")] public SwitchParameter Wait { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"VM {VmId} from node '{Node}' to node '{TargetNode}'", "Move-PveVm")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Vms/MovePveVmDiskCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Vms/MovePveVmDiskCmdlet.cs index 70c63e4..f72347f 100644 --- a/src/PSProxmoxVE/Cmdlets/Vms/MovePveVmDiskCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Vms/MovePveVmDiskCmdlet.cs @@ -60,7 +60,7 @@ namespace PSProxmoxVE.Cmdlets.Vms [Parameter(Mandatory = false, HelpMessage = "Wait for the task to complete before returning.")] public SwitchParameter Wait { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"Disk '{Disk}' on VM {VmId} (node '{Node}') to storage '{Storage}'", "Move-PveVmDisk")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Vms/NewPveVmCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Vms/NewPveVmCmdlet.cs index e898dbb..525c359 100644 --- a/src/PSProxmoxVE/Cmdlets/Vms/NewPveVmCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Vms/NewPveVmCmdlet.cs @@ -185,7 +185,7 @@ namespace PSProxmoxVE.Cmdlets.Vms [Parameter(Mandatory = false, HelpMessage = "Wait for the task to complete before returning.")] public SwitchParameter Wait { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { // Validate -DiskSize and disk-option combinations before ShouldProcess so // typos and invalid combos are rejected even with -WhatIf, and so the error diff --git a/src/PSProxmoxVE/Cmdlets/Vms/ReadPveVmGuestFileCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Vms/ReadPveVmGuestFileCmdlet.cs index 775c128..19f7b90 100644 --- a/src/PSProxmoxVE/Cmdlets/Vms/ReadPveVmGuestFileCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Vms/ReadPveVmGuestFileCmdlet.cs @@ -30,7 +30,7 @@ namespace PSProxmoxVE.Cmdlets.Vms [Parameter(Mandatory = true, HelpMessage = "The file path inside the guest to read.")] public string File { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); diff --git a/src/PSProxmoxVE/Cmdlets/Vms/RemovePveVmCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Vms/RemovePveVmCmdlet.cs index 63a9bc7..a05e5dc 100644 --- a/src/PSProxmoxVE/Cmdlets/Vms/RemovePveVmCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Vms/RemovePveVmCmdlet.cs @@ -54,7 +54,7 @@ namespace PSProxmoxVE.Cmdlets.Vms [Parameter(Mandatory = false, HelpMessage = "Wait for the task to complete before returning.")] public SwitchParameter Wait { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"VM {VmId} on node '{Node}'", "Remove-PveVm")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Vms/RemovePveVmDiskCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Vms/RemovePveVmDiskCmdlet.cs index 2a7cc00..29097f9 100644 --- a/src/PSProxmoxVE/Cmdlets/Vms/RemovePveVmDiskCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Vms/RemovePveVmDiskCmdlet.cs @@ -41,7 +41,7 @@ namespace PSProxmoxVE.Cmdlets.Vms [Parameter(Mandatory = false, HelpMessage = "Force removal of disk images from storage.")] public SwitchParameter Force { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"Disks '{IdList}' on VM {VmId} (node '{Node}')", "Remove-PveVmDisk")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Vms/ResetPveVmCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Vms/ResetPveVmCmdlet.cs index e736006..b0f01bc 100644 --- a/src/PSProxmoxVE/Cmdlets/Vms/ResetPveVmCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Vms/ResetPveVmCmdlet.cs @@ -43,7 +43,7 @@ namespace PSProxmoxVE.Cmdlets.Vms [ValidateRange(1, 3600)] public int Timeout { get; set; } = 60; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"VM {VmId} on node '{Node}'", "Reset-PveVm")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Vms/ResizePveVmDiskCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Vms/ResizePveVmDiskCmdlet.cs index 99e1b54..afa489c 100644 --- a/src/PSProxmoxVE/Cmdlets/Vms/ResizePveVmDiskCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Vms/ResizePveVmDiskCmdlet.cs @@ -56,7 +56,7 @@ namespace PSProxmoxVE.Cmdlets.Vms [Parameter(Mandatory = false, HelpMessage = "Wait for the task to complete before returning.")] public SwitchParameter Wait { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"Disk '{Disk}' on VM {VmId} (node '{Node}') to size '{Size}'", "Resize-PveVmDisk")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Vms/RestartPveVmCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Vms/RestartPveVmCmdlet.cs index 2f19fcd..7a5ea1a 100644 --- a/src/PSProxmoxVE/Cmdlets/Vms/RestartPveVmCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Vms/RestartPveVmCmdlet.cs @@ -47,7 +47,7 @@ namespace PSProxmoxVE.Cmdlets.Vms [Parameter(Mandatory = false, HelpMessage = "Wait for the task to complete before returning.")] public SwitchParameter Wait { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"VM {VmId} on node '{Node}'", "Restart-PveVm")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Vms/ResumePveVmCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Vms/ResumePveVmCmdlet.cs index 60a63c9..84220cd 100644 --- a/src/PSProxmoxVE/Cmdlets/Vms/ResumePveVmCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Vms/ResumePveVmCmdlet.cs @@ -41,7 +41,7 @@ namespace PSProxmoxVE.Cmdlets.Vms [ValidateRange(1, 3600)] public int Timeout { get; set; } = 60; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"VM {VmId} on node '{Node}'", "Resume-PveVm")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Vms/SetPveVmConfigCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Vms/SetPveVmConfigCmdlet.cs index 050aa5a..77f462e 100644 --- a/src/PSProxmoxVE/Cmdlets/Vms/SetPveVmConfigCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Vms/SetPveVmConfigCmdlet.cs @@ -105,7 +105,7 @@ namespace PSProxmoxVE.Cmdlets.Vms [Parameter(Mandatory = false, HelpMessage = "Comma-separated config keys to delete.")] public string? Delete { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"VM {VmId} on node '{Node}'", "Set-PveVmConfig")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Vms/SetPveVmGuestPasswordCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Vms/SetPveVmGuestPasswordCmdlet.cs index 656eada..7ca8494 100644 --- a/src/PSProxmoxVE/Cmdlets/Vms/SetPveVmGuestPasswordCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Vms/SetPveVmGuestPasswordCmdlet.cs @@ -44,7 +44,7 @@ namespace PSProxmoxVE.Cmdlets.Vms [Parameter(Mandatory = false, HelpMessage = "Indicates the password is already crypted/hashed.")] public SwitchParameter Crypted { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"User '{Username}' on VM {VmId} (node '{Node}')", "Set-PveVmGuestPassword")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Vms/StartPveVmCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Vms/StartPveVmCmdlet.cs index 9a7b8e3..0c4af20 100644 --- a/src/PSProxmoxVE/Cmdlets/Vms/StartPveVmCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Vms/StartPveVmCmdlet.cs @@ -41,7 +41,7 @@ namespace PSProxmoxVE.Cmdlets.Vms [ValidateRange(1, 3600)] public int Timeout { get; set; } = 60; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"VM {VmId} on node '{Node}'", "Start-PveVm")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Vms/StopPveVmCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Vms/StopPveVmCmdlet.cs index bf43145..ac06e0f 100644 --- a/src/PSProxmoxVE/Cmdlets/Vms/StopPveVmCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Vms/StopPveVmCmdlet.cs @@ -43,7 +43,7 @@ namespace PSProxmoxVE.Cmdlets.Vms [ValidateRange(1, 3600)] public int Timeout { get; set; } = 60; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"VM {VmId} on node '{Node}'", "Stop-PveVm")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Vms/SuspendPveVmCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Vms/SuspendPveVmCmdlet.cs index 522567c..bb9c643 100644 --- a/src/PSProxmoxVE/Cmdlets/Vms/SuspendPveVmCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Vms/SuspendPveVmCmdlet.cs @@ -42,7 +42,7 @@ namespace PSProxmoxVE.Cmdlets.Vms [ValidateRange(1, 3600)] public int Timeout { get; set; } = 60; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"VM {VmId} on node '{Node}'", "Suspend-PveVm")) return; diff --git a/src/PSProxmoxVE/Cmdlets/Vms/TestPveVmGuestAgentCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Vms/TestPveVmGuestAgentCmdlet.cs index 2cd69b9..52ab8aa 100644 --- a/src/PSProxmoxVE/Cmdlets/Vms/TestPveVmGuestAgentCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Vms/TestPveVmGuestAgentCmdlet.cs @@ -23,7 +23,7 @@ namespace PSProxmoxVE.Cmdlets.Vms [ValidateRange(100, 999999999)] public int VmId { get; set; } - protected override void ProcessRecord() + protected override void ProcessPveRecord() { var session = GetSession(); diff --git a/src/PSProxmoxVE/Cmdlets/Vms/WritePveVmGuestFileCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Vms/WritePveVmGuestFileCmdlet.cs index 8c1748d..687518f 100644 --- a/src/PSProxmoxVE/Cmdlets/Vms/WritePveVmGuestFileCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Vms/WritePveVmGuestFileCmdlet.cs @@ -35,7 +35,7 @@ namespace PSProxmoxVE.Cmdlets.Vms [Parameter(Mandatory = true, HelpMessage = "The content to write to the file.")] public string Content { get; set; } = string.Empty; - protected override void ProcessRecord() + protected override void ProcessPveRecord() { if (!ShouldProcess($"File '{File}' on VM {VmId} (node '{Node}')", "Write-PveVmGuestFile")) return; diff --git a/tests/PSProxmoxVE.Core.Tests/Errors/PveErrorMapperTests.cs b/tests/PSProxmoxVE.Core.Tests/Errors/PveErrorMapperTests.cs new file mode 100644 index 0000000..c52ba91 --- /dev/null +++ b/tests/PSProxmoxVE.Core.Tests/Errors/PveErrorMapperTests.cs @@ -0,0 +1,142 @@ +using System; +using System.Net; +using PSProxmoxVE.Core.Authentication; +using PSProxmoxVE.Core.Errors; +using PSProxmoxVE.Core.Exceptions; +using Xunit; + +namespace PSProxmoxVE.Core.Tests.Errors +{ + public class PveErrorMapperTests + { + private static PveApiException Api(HttpStatusCode status, string resource = "nodes/pve1/qemu/100") + => new PveApiException(status, "denied", resource, "GET"); + + [Theory] + [InlineData(HttpStatusCode.BadRequest, PveErrorKind.InvalidArgument)] + [InlineData(HttpStatusCode.Unauthorized, PveErrorKind.AuthenticationError)] + [InlineData(HttpStatusCode.Forbidden, PveErrorKind.PermissionDenied)] + [InlineData(HttpStatusCode.NotFound, PveErrorKind.ObjectNotFound)] + [InlineData(HttpStatusCode.RequestTimeout, PveErrorKind.OperationTimeout)] + [InlineData(HttpStatusCode.GatewayTimeout, PveErrorKind.OperationTimeout)] + [InlineData(HttpStatusCode.ServiceUnavailable, PveErrorKind.ConnectionError)] + [InlineData(HttpStatusCode.InternalServerError, PveErrorKind.ResourceUnavailable)] + [InlineData(HttpStatusCode.BadGateway, PveErrorKind.ResourceUnavailable)] + [InlineData(HttpStatusCode.Conflict, PveErrorKind.InvalidOperation)] + [InlineData(HttpStatusCode.MethodNotAllowed, PveErrorKind.InvalidOperation)] + [InlineData((HttpStatusCode)599, PveErrorKind.ResourceUnavailable)] + [InlineData((HttpStatusCode)418, PveErrorKind.InvalidOperation)] + [InlineData((HttpStatusCode)600, PveErrorKind.InvalidOperation)] + public void Describe_MapsApiStatusToKind(HttpStatusCode status, PveErrorKind expected) + { + Assert.Equal(expected, PveErrorMapper.Describe(Api(status)).Kind); + } + + [Fact] + public void Describe_ApiErrorIdCarriesStatusAndResource() + { + var descriptor = PveErrorMapper.Describe(Api(HttpStatusCode.NotFound)); + + Assert.Equal("PveApi.404.nodes/pve1/qemu/100", descriptor.ErrorId); + Assert.Equal("nodes/pve1/qemu/100", descriptor.Target); + } + + [Theory] + [InlineData("")] + [InlineData(" ")] + public void Describe_ApiErrorIdOmitsBlankResource(string resource) + { + var descriptor = PveErrorMapper.Describe(Api(HttpStatusCode.Forbidden, resource)); + + Assert.Equal("PveApi.403", descriptor.ErrorId); + Assert.Null(descriptor.Target); + } + + [Fact] + public void Describe_MapsNotConnectedToConnectionError() + { + var descriptor = PveErrorMapper.Describe(new PveNotConnectedException()); + + Assert.Equal(PveErrorKind.ConnectionError, descriptor.Kind); + Assert.Equal("PveNotConnected", descriptor.ErrorId); + Assert.Null(descriptor.Target); + } + + [Fact] + public void Describe_MapsSessionExpiredToAuthenticationError() + { + var descriptor = PveErrorMapper.Describe(new PveSessionExpiredException()); + + Assert.Equal(PveErrorKind.AuthenticationError, descriptor.Kind); + Assert.Equal("PveSessionExpired", descriptor.ErrorId); + Assert.Null(descriptor.Target); + } + + [Fact] + public void Describe_MapsTaskFailedToOperationStoppedWithUpidTarget() + { + var descriptor = PveErrorMapper.Describe(new PveTaskFailedException("UPID:pve1:1", "boom")); + + Assert.Equal(PveErrorKind.OperationStopped, descriptor.Kind); + Assert.Equal("PveTaskFailed", descriptor.ErrorId); + Assert.Equal("UPID:pve1:1", descriptor.Target); + } + + [Fact] + public void Describe_MapsTaskTimeoutToOperationTimeoutWithUpidTarget() + { + var descriptor = PveErrorMapper.Describe( + new PveTaskTimeoutException("UPID:pve1:2", TimeSpan.FromSeconds(5))); + + Assert.Equal(PveErrorKind.OperationTimeout, descriptor.Kind); + Assert.Equal("PveTaskTimeout", descriptor.ErrorId); + Assert.Equal("UPID:pve1:2", descriptor.Target); + } + + [Fact] + public void Describe_MapsVersionExceptionToInvalidOperation() + { + var descriptor = PveErrorMapper.Describe( + new PveVersionException(9, 0, new PveVersion(8, 4))); + + Assert.Equal(PveErrorKind.InvalidOperation, descriptor.Kind); + Assert.Equal("PveVersionTooOld", descriptor.ErrorId); + Assert.Null(descriptor.Target); + } + + [Fact] + public void Describe_LeavesUnrecognisedExceptionUnclassified() + { + var descriptor = PveErrorMapper.Describe(new InvalidOperationException("x")); + + Assert.Equal(PveErrorKind.NotSpecified, descriptor.Kind); + Assert.Equal("InvalidOperationException", descriptor.ErrorId); + Assert.Null(descriptor.Target); + } + + [Fact] + public void IsRecognized_AcceptsEveryModuleException() + { + Assert.True(PveErrorMapper.IsRecognized(Api(HttpStatusCode.NotFound))); + Assert.True(PveErrorMapper.IsRecognized(new PveNotConnectedException())); + Assert.True(PveErrorMapper.IsRecognized(new PveSessionExpiredException())); + Assert.True(PveErrorMapper.IsRecognized(new PveTaskFailedException("u", "boom"))); + Assert.True(PveErrorMapper.IsRecognized(new PveTaskTimeoutException("u", TimeSpan.Zero))); + Assert.True(PveErrorMapper.IsRecognized(new PveVersionException(9, 0, new PveVersion(8, 4)))); + } + + [Fact] + public void IsRecognized_RejectsExceptionsTheModuleDoesNotClassify() + { + Assert.False(PveErrorMapper.IsRecognized(new ArgumentException("x"))); + Assert.False(PveErrorMapper.IsRecognized(new TimeoutException("x"))); + Assert.False(PveErrorMapper.IsRecognized(new InvalidOperationException("x"))); + } + + [Fact] + public void Describe_RejectsNull() + { + Assert.Throws(() => PveErrorMapper.Describe(null!)); + } + } +} diff --git a/tests/PSProxmoxVE.Tests/Errors/ErrorRecordMapping.Tests.ps1 b/tests/PSProxmoxVE.Tests/Errors/ErrorRecordMapping.Tests.ps1 new file mode 100644 index 0000000..5f14ee2 --- /dev/null +++ b/tests/PSProxmoxVE.Tests/Errors/ErrorRecordMapping.Tests.ps1 @@ -0,0 +1,42 @@ +#Requires -Module Pester +<# +.SYNOPSIS + Pester 5 tests for the cmdlet-level PVE error record mapping. + Fully offline — the failure under test is raised before any request is sent. +#> + +BeforeAll { + . $PSScriptRoot/../_TestHelper.ps1 +} + +Describe 'PVE error record mapping' { + Context 'Without an active session' { + It 'Reports the missing session as ConnectionError' { + $record = $null + try { Get-PveNode -ErrorAction Stop } catch { $record = $_ } + + $record | Should -Not -BeNullOrEmpty + $record.CategoryInfo.Category | Should -Be 'ConnectionError' + } + + It 'Reports the missing session with the PveNotConnected error id' { + $record = $null + try { Get-PveVm -ErrorAction Stop } catch { $record = $_ } + + $record | Should -Not -BeNullOrEmpty + $record.FullyQualifiedErrorId | Should -BeLike 'PveNotConnected,*' + } + } + + Context 'Error kind vocabulary' { + It 'Every PveErrorKind name is also an ErrorCategory name' { + $kinds = [enum]::GetNames([PSProxmoxVE.Core.Errors.PveErrorKind]) + $categories = [enum]::GetNames([System.Management.Automation.ErrorCategory]) + + $kinds | Should -Not -BeNullOrEmpty + foreach ($kind in $kinds) { + $categories | Should -Contain $kind + } + } + } +}