public/Get-PreHookJobStatus.ps1

<#
.SYNOPSIS
 Gets the status of a Kubernetes pre-hook job and populates status information.

.DESCRIPTION
Mainly for internal use. It was split out as a function since now used by a thread, this helps with call stack

.PARAMETER PreHookJobName
The name of the pre-hook job to monitor.

.PARAMETER Namespace
The Kubernetes namespace where the pre-hook job is running.

.PARAMETER LogFileFolder
Optional. The folder path where log files will be written.

.PARAMETER StartTime
The time when monitoring started, used to filter events.

.PARAMETER PreHookTimeoutSecs
The timeout in seconds to wait for the pre-hook job to complete.

.PARAMETER PollIntervalSec
The interval in seconds between status checks.

.PARAMETER Status
A ReleaseStatus object that will be populated with the PreHookStatus property and any error events.

.EXAMPLE
Get-PreHookJobStatus -PreHookJobName "my-hook" -Namespace "default" `
    -StartTime (Get-Date) -PreHookTimeoutSecs 300 -PollIntervalSec 5 -Status $statusObj
#>

function Get-PreHookJobStatus {
        [CmdletBinding()]
        param (
            [Parameter(Mandatory)]
            [string] $PreHookJobName,
            [Parameter(Mandatory)]
            [string] $Namespace,
            [string] $LogFileFolder,
            [Parameter(Mandatory)]
            [datetime] $StartTime,
            [Parameter(Mandatory)]
            [int] $PreHookTimeoutSecs,
            [Parameter(Mandatory)]
            [int] $PollIntervalSec,
            [Parameter(Mandatory)]
            $Status
        )
        Set-StrictMode -Version Latest
        $ErrorActionPreference = "Stop"

        try {

            $hookStatus = Get-PodStatus -Selector "job-name=$PreHookJobName" `
                                        -Namespace $Namespace `
                                        -TimeoutSec $PreHookTimeoutSecs `
                                        -PollIntervalSec $PollIntervalSec `
                                        -PodType PreInstallJob `
                                        -LogFileFolder $LogFileFolder
            Write-Debug "Prehook status is $($hookStatus | ConvertTo-Json -Depth 5 -EnumsAsStrings)"
            if ($hookStatus -is "array" ) {
                Write-Warning "Multiple hook statuses returned:`n$($hookStatus | ConvertTo-Json -Depth 5 -EnumsAsStrings)" # so we can see the status
            }
            $Status.PreHookStatus = $hookStatus | Select-Object -Last 1 # get the last status, in case it was a job
            if ($Status.PreHookStatus.Status -ne [Status]::Completed) {
                $events = Get-JobPodEvent -JobName $PreHookJobName -Since $StartTime
                if ($events) {
                    $errors = Write-K8sEvent -Name "$PreHookJobName's pod since $StartTime" `
                                        -Prefix "PreHookJob" `
                                        -Events $events `
                                        -LogLevel error `
                                        -PassThru
                    $Status.PreHookStatus.LastBadEvents = $errors
                    Write-Debug "Prehook job '$PreHookJobName' events: $($Status.PreHookStatus.LastBadEvents | ConvertTo-Json -Depth 5 -EnumsAsStrings)"
                } else {
                    Write-VerboseStatus "No events found for prehook job '$PreHookJobName' since $StartTime"
                }
            }
        } catch {
            Write-Error "Error getting prehook pod status: $_`n$($_.ScriptStackTrace)"
        }
    }