Public/Wait-RobopackFlowDeploymentContentUpdate.ps1
|
function Wait-RobopackFlowDeploymentContentUpdate { [CmdletBinding()] param( [Parameter(Mandatory)] [string] $DeploymentId, [ValidateRange(1, 3600)] [int] $PollIntervalSeconds = 15, [ValidateRange(1, 1440)] [int] $TimeoutMinutes = 60, [Parameter(Mandatory)] [string] $ApiKey ) $startedAt = Get-Date $deadline = $startedAt.AddMinutes($TimeoutMinutes) $lastStatus = $null while ((Get-Date) -lt $deadline) { $details = Get-RobopackFlowDeploymentDetails -DeploymentId $DeploymentId -ApiKey $ApiKey $statusCandidates = @( $details.contentUpdateStatus, $details.updateContentStatus, $details.taskStatus, $details.operationStatus, $details.status, $details.state, $(if ($details.contentUpdate) { $details.contentUpdate.status } else { $null }), $(if ($details.contentUpdate) { $details.contentUpdate.state } else { $null }) ) | Where-Object { -not [string]::IsNullOrWhiteSpace([string]$_) } $status = if ($statusCandidates.Count -gt 0) { [string]$statusCandidates[0] } else { $null } $statusNormalized = if ($status) { $status.Trim().ToLowerInvariant() } else { $null } $lastStatus = $status $isUpdatingCandidates = @( $details.isUpdatingContent, $details.updatingContent, $(if ($details.contentUpdate) { $details.contentUpdate.isUpdating } else { $null }), $(if ($details.contentUpdate) { $details.contentUpdate.inProgress } else { $null }) ) | Where-Object { $null -ne $_ } $isUpdating = $null if ($isUpdatingCandidates.Count -gt 0) { $isUpdating = [bool]$isUpdatingCandidates[0] } $isSuccess = $statusNormalized -in @('completed','complete','succeeded','success') $isFailure = $statusNormalized -in @('failed','error','cancelled','canceled') if ($isSuccess -or $isFailure) { return [PSCustomObject]@{ Completed = $true Succeeded = $isSuccess Status = $status DeploymentId = $DeploymentId StartedAt = $startedAt FinishedAt = Get-Date ElapsedSeconds = [int]((Get-Date) - $startedAt).TotalSeconds Details = $details } } if ($null -ne $isUpdating -and -not $isUpdating) { return [PSCustomObject]@{ Completed = $true Succeeded = $true Status = $(if ($status) { $status } else { 'Completed' }) DeploymentId = $DeploymentId StartedAt = $startedAt FinishedAt = Get-Date ElapsedSeconds = [int]((Get-Date) - $startedAt).TotalSeconds Details = $details } } $elapsedSeconds = [int]((Get-Date) - $startedAt).TotalSeconds Write-Verbose "Waiting for deployment content update... Status: $status | Elapsed: ${elapsedSeconds}s" Start-Sleep -Seconds $PollIntervalSeconds } throw "Timed out after $TimeoutMinutes minute(s) while waiting for deployment content update. Last status: $lastStatus" } |