private/Write-K8sEvent.ps1
<# .SYNOPSIS Write out Kubernetes events for a given object .PARAMETER Name Name of the object to get events for .PARAMETER Prefix Prefix for logging, usually the type of the object .PARAMETER Since Only get events since this time .PARAMETER LogLevel Log level to use for the header .PARAMETER PassThru Return any errors messages found in events .PARAMETER FilterStartupWarnings Filter out startup warnings if pod is running ok .OUTPUTS If PassThru is set, return array of strings error messages #> function Write-K8sEvent { [CmdletBinding()] param ( [Parameter(Mandatory)] [string] $Name, [array] $Events, [Parameter(Mandatory)] [string] $Prefix, [DateTime] $Since, [ValidateSet("error", "warning", "ok", "normal")] [string] $LogLevel = "ok", [switch] $PassThru, [switch] $FilterStartupWarnings ) Set-StrictMode -Version Latest $ErrorActionPreference = "Stop" $msg = "Events for $Prefix $Name" if (!$Events) { Write-Status "No $msg" -LogLevel ok if ($PassThru) { return @() } return } if ($Since) { $msg += " since $($Since.ToString("HH:mm:ss"))" $Events = @($Events | Where-Object { $_.lastTimestamp -gt $Since }) } if ($Events) { Write-Verbose ($Events | ConvertTo-Json -Depth 5) } else { Write-Verbose "No events found for $Prefix $Name since $($Since.ToString("HH:mm:ss"))" } $errors = $Events | Where-Object { $_.type -ne "Normal" } | Select-Object -ExpandProperty Message if ($errors -and $FilterStartupWarnings) { $errors = $errors | Where-Object { $_ -notLike "Startup probe failed:*" } } $filteredEvents = $Events | Select-Object type, reason, message, @{n='creationTimestamp';e={$_.metadata.creationTimestamp}} if ($filteredEvents) { Write-Header $msg -LogLevel $LogLevel $filteredEvents | Out-String -Width 500 | Write-Plain Write-Footer "End events for $Prefix $Name" } else { Write-Status "No $msg" -LogLevel ok } if ($PassThru) { return $errors } } |