Azure Powershell cmdlets for 1.7, June 2012: what's happened to Get-OperationStatus?
-
19-06-2021 - |
题
The new Powershell cmdlets (documented here: http://msdn.microsoft.com/en-us/library/windowsazure/jj152841) look lovely, but there's one that appears missing:
Get-OperationStatus -WaitToComplete
Without this my Azure operations (e.g. Set-AzureDeployment
) don't wait for completion.
This makes it hard to know when e.g. a staging instance is running before doing a VIP swap.
Are there any alternatives?
解决方案
So, after investigation, my initial supposition was partly wrong: calls to the new Powershell cmdlets do wait for successful completion, except for Set-AzureDeployment -newStatus "Running"
.
This is good, as we no longer need to have calls to Get-OperationStatus
scattered through the script; it's bad, though, as Set-AzureDeployment
leaves the deployment spinning up.
We can call Get-AzureDeployment
, though, and iterate through the RoleInstanceList
to figure out what's going on. Like so:
function Get-StagingReady {
$stagingStatus = Get-AzureDeployment $azureService -slot staging
if (-not $($stagingStatus.Status -eq "Running")) {
Write-Host $(" ... ... Staging slot status is not Running; value is " + $stagingStatus.Running)
return $False
}
if (-not $stagingStatus.RoleInstanceList) {
Write-Host " ... ... Staging slot has no instances configured yet."
return $False
}
$notReady = $False
Foreach ($roleInstance in $stagingStatus.RoleInstanceList) {
if (-not $($roleInstance.InstanceStatus -eq "ReadyRole")) {
Write-Host $(" ... ... ... Staging slot instance " + $roleInstance.InstanceName + " has status " + $roleInstance.InstanceStatus)
$notReady = $True
}
}
if ($notReady) {
Write-Host " ... ... One or more instances not running."
return $False
}
Write-Host " ... Staging slot ready for use."
return $True
}
function Wait-ForStagingToBeReady {
while ( -not $(Get-StagingReady) ) {
Write-Host " ... ... Staging slot not ready, waiting 15 seconds for Azure to spin up instances."
Start-Sleep -s 15
}
}
function Start-Staging {
Write-Host " ... Starting staging slot."
$staging = Get-Staging $azureService
$result = Set-AzureDeployment `
-Status `
-serviceName $azureService `
-slot "Staging" `
-newStatus "Running"
if (-not $?) {
Write-Host
Write-Host "Unable to start staging slot."
Write-Host "DEPLOY FAILED"
Write-Host
exit 1
}
Wait-ForStagingToBeReady
Write-Host " ... Deployment in Staging slot started."
}
其他提示
but there's one that appears missing
If it’s not supported, then please find an alternative. For example, please use the REST API directly instead of using PowerShell. The REST API allows us to track async requests: http://msdn.microsoft.com/en-us/library/windowsazure/ee460791.
In addition, you can also submit a feature request on http://www.mygreatwindowsazureidea.com/forums/34192-windows-azure-feature-voting.
Best Regards,
Ming Xu.