Files
lyuboasenov 062749868d Add PAIF-N automation example (#629)
* Adding PAIF-N demo scripts

* Removing Confidential from headers

* Addressing review comments

---------

Co-authored-by: Lyuboslav Asenov <lasenov@vmware.com>
2024-03-28 15:50:45 +02:00

109 lines
3.1 KiB
PowerShell

<#
# © 2024 Broadcom. All Rights Reserved. Broadcom. The term "Broadcom" refers to
# Broadcom Inc. and/or its subsidiaries.
#>
using namespace VMware.Bindings.Vcf.SddcManager.Model
<#
.SYNOPSIS
This cmdlet waits for VCF task to complete or fail.
.DESCRIPTION
This cmdlet waits for VCF task to complete or fail.
.PARAMETER Task
Specifies the task to be waited for.
.PARAMETER ThrowOnError
Specifies if an error will be thrown if the task fails.
.EXAMPLE
PS C:\> Wait-VcfTask -Task $task -ThrowOnError
Waits for the $task to complete or fails.
.OUTPUTS
Zero or more VMware.Bindings.Vcf.SddcManager.Model.Task object
.LINK
#>
function Wait-VcfTask {
[CmdletBinding(
ConfirmImpact = "None",
DefaultParameterSetName = "Default",
SupportsPaging = $false,
PositionalBinding = $false,
RemotingCapability = "None",
SupportsShouldProcess = $false,
SupportsTransactions = $false)]
[OutputType([VMware.Bindings.Vcf.SddcManager.Model.Task])]
Param (
[Parameter(
Mandatory = $true,
Position = 0)]
[VMware.Bindings.Vcf.SddcManager.Model.Task]
$Task,
[Parameter()]
[switch]
$ThrowOnError
)
$Task | ConvertTo-Json -Depth 10 | Write-Verbose
$taskName = $Task.Name
Write-Progress -Id 0 $taskName
while ($Task.Status -eq "In Progress" -or $Task.Status -eq 'IN_PROGRESS' -or $Task.Status -eq 'PENDING' -or $Task.Status -eq 'Pending') {
Write-Verbose "$taskName in progress"
$Task | ConvertTo-Json -Depth 10 | Write-Verbose
if ($Task.SubTasks -and $Task.SubTasks.Count -gt 0) {
$completedSubTask = $Task.SubTasks | Where-Object {
$_.Status -eq 'SUCCESSFUL' -or $_.Status -eq 'Successful'
} | Measure-Object | Select-Object -ExpandProperty Count
$currentSubTaskName = $Task.SubTasks | Where-Object {
$_.Status -eq 'RUNNING' -or $_.Status -eq 'Running' -or $_.Status -eq "IN_PROGRESS" -or $_.Status -eq "In Progress"
} | Select-Object -First 1 -ExpandProperty Name
if ($currentSubTaskName) {
Write-Progress -Id 0 $taskName -Status $currentSubTaskName -PercentComplete (($completedSubTask * 100) / $Task.SubTasks.Count)
} else {
Write-Progress -Id 0 $taskName -PercentComplete (($completedSubTask * 100) / $Task.SubTasks.Count)
}
}
Start-Sleep -Seconds 1
$Task = Invoke-VcfGetTask -id $Task.Id
$taskName = $Task.Name
}
if ($Task.Status -ne "Successful" -and $Task.Status -ne 'SUCCESSFUL') {
Write-Progress -Id 0 "$taskName failed" -Completed
Write-Verbose "$taskName failed"
$Task | ConvertTo-Json -Depth 10 | Write-Verbose
$Task.SubTasks | ForEach-Object {
Write-Verbose "[$(if($_.Status -eq 'SUCCESSFUL' -or $_.Status -eq "Successful"){"+"}else{"-"})] $($_.Description)"
}
if ($ThrowOnError) {
throw $Task
} else {
Write-Output $Task
}
} else {
Write-Progress -Id 0 "$taskName succeeded" -Completed
Write-Verbose "$taskName succeeded"
Write-Output $Task
}
}