Examples/Invoke-ProxmoxMonitor-AMP.ps1
|
#requires -Version 5.1 [CmdletBinding()] param( [Parameter(Mandatory)][string]$Server, [Parameter(Mandatory)][string]$TokenID, [Parameter(Mandatory)][string]$TokenSecret, [string]$ClusterName = 'default', [string]$ExpectedRunningVMIDs = '', [string]$ExpectedBackupVMIDs = '', [bool]$Standalone = $false, [ValidateSet('Ignore', 'Validate', 'Pin')][string]$TlsMode = 'Ignore', [string]$CertificateSha256 = '' ) $ErrorActionPreference = 'Stop' function ConvertTo-VMIDArray { param([string]$Value) if ([string]::IsNullOrWhiteSpace($Value)) { return @() } return @($Value -split ',' | ForEach-Object { $number = 0 if (-not [int]::TryParse($_.Trim(), [ref]$number) -or $number -lt 1) { throw [IO.InvalidDataException]::new("Invalid VMID '$($_.Trim())'.") } $number } | Select-Object -Unique) } try { Import-Module ProxmoxMonitor -Force -ErrorAction Stop $parameters = @{ Server = $Server TokenID = $TokenID TokenSecret = $TokenSecret ClusterName = $ClusterName ExpectedRunningVMIDs = @(ConvertTo-VMIDArray $ExpectedRunningVMIDs) ExpectedBackupVMIDs = @(ConvertTo-VMIDArray $ExpectedBackupVMIDs) TlsMode = $TlsMode CertificateSha256 = $CertificateSha256 OutputFormat = 'Json' Compress = $true } if ($Standalone) { $parameters.Standalone = $true } Invoke-ProxmoxMonitor @parameters } catch { $message = $_.Exception.Message $status = if ($_.Exception -is [IO.InvalidDataException]) { 'UNKNOWN' } else { 'CRITICAL' } $checks = @('Cluster', 'Node', 'Storage', 'Guest', 'Backup', 'Replication', 'HA', 'Ceph', 'Zfs' | ForEach-Object { [pscustomobject]@{ Check = $_ Status = $status Findings = @([pscustomobject]@{ Status = $status; Message = "AMP failed: $message" }) Metrics = @() } }) [pscustomobject][ordered]@{ SchemaVersion = 1 GeneratedAtUtc = [DateTime]::UtcNow.ToString('o') ModuleVersion = $null ClusterName = $ClusterName Server = $Server CollectedAtUtc = $null OverallStatus = $status Checks = $checks Inventory = [pscustomobject][ordered]@{ Nodes = @(); Storage = @(); Disks = @(); Guests = @(); GuestNetworkRates = @() BackupTasks = @(); ReplicationJobs = @(); HAStatus = @() CephStatus = @(); CephMetadata = @(); ZfsPools = @() } } | ConvertTo-Json -Depth 10 -Compress } |