2012年6月1日的Azure Powershell cmdlet:Get-OperationStatus发生了什么?

Jer*_*Gee 5 azure azure-configuration azure-powershell

新的Powershell cmdlet(在此处记录:http://msdn.microsoft.com/en-us/library/windowsazure/jj152841)看起来很可爱,但有一个看起来缺失:

Get-OperationStatus -WaitToComplete

没有这个我的Azure操作(例如Set-AzureDeployment)不等待完成.

这使得在进行VIP交换之前很难知道例如暂存实例何时运行.

还有其他选择吗?

Jer*_*Gee 10

所以,经过调查,我最初的假设是部分错误:新的PowerShell命令调用不要等待成功完成,除了Set-AzureDeployment -newStatus "Running".

这很好,因为我们不再需要Get-OperationStatus通过脚本分散调用; 然而,这很糟糕,因为Set-AzureDeployment部署开始了.

Get-AzureDeployment不过,我们可以打电话,并通过迭代RoleInstanceList来弄清楚发生了什么.像这样:

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."
}
Run Code Online (Sandbox Code Playgroud)