ps/Modules/Alkami.PowerShell.ServiceFabric/Public/Wait-AlkamiServiceFabricClusterHealthy.ps1
2023-05-30 22:51:22 -07:00

59 lines
2.0 KiB
PowerShell

function Wait-AlkamiServiceFabricClusterHealthy {
<#
.SYNOPSIS
Polls the status of a Service Fabric cluster containing the specified host until either a timeout
occurs or the cluster health status is 'Ok'.
.PARAMETER Hostname
[string] The host name of any server in the Service Fabric cluster. If not provided, defaults to localhost.
.PARAMETER TimeoutMinutes
[byte] The length of time in minutes to poll the cluster for a healthy status before declaring that an error
has occurred. Defaults to 30 minutes.
.PARAMETER SleepIntervalSeconds
[byte] The length of time in seconds to pause between cluster status queries. Defaults to 15 seconds.
#>
[CmdletBinding()]
param(
[Parameter(Mandatory = $false)]
[ValidateNotNullOrEmpty()]
[string]$Hostname = 'localhost',
[Parameter(Mandatory=$false)]
[byte]$TimeoutMinutes = 30,
[Parameter(Mandatory=$false)]
[ValidateRange(1, 120)]
[byte]$SleepIntervalSeconds = 15
)
$loglead = (Get-LogLeadName)
Connect-AlkamiServiceFabricCluster -Hostname $Hostname
Write-Host "$loglead : Waiting for Service Fabric cluster to be healthy."
# Keep looping until the Service Fabric cluster is healthy or we timeout.
$stopwatch = [system.diagnostics.stopwatch]::StartNew()
while($true) {
$clusterHealth = Get-ServiceFabricClusterHealth
if ( $clusterHealth.AggregatedHealthState -eq 'Ok' ) {
$stopwatch.Stop()
Write-Host "$logLead : Service Fabric cluster is healthy after $($stopwatch.Elapsed.ToString())."
break
} elseif ( $stopwatch.Elapsed.TotalMinutes -gt $timeoutMinutes ) {
$stopwatch.Stop()
Write-Error "$logLead : Timed out waiting for Service Fabric cluster to be healthy after $($stopwatch.Elapsed.ToString())."
break
} else {
Start-Sleep -Seconds $sleepIntervalSeconds
}
}
}