Question

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?

Was it helpful?

Solution

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."
}

OTHER TIPS

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top