2012-07-05 15 views
5

Nowe cmdlets PowerShell (udokumentowane tutaj: http://msdn.microsoft.com/en-us/library/windowsazure/jj152841) wyglądają pięknie, ale jest jeden, który pojawia brakuje:Polecenia cmdlet Azure PowerShell na 1.7, czerwiec 2012: co się stało z Get-OperationStatus?

Get-OperationStatus -WaitToComplete

bez tego moje Azure operacji (np Set-AzureDeployment) nie czekać do zakończenia.

To sprawia, że ​​trudno stwierdzić, kiedy instancja przemieszczania jest uruchomiona przed wykonaniem wymiany VIP.

Czy są jakieś alternatywy?

+0

Ponadto, nie wydaje się być w stanie zainstalować starszych wersji poleceń cmdlet Powershell; nie działają na kontrolerze zależności, ponieważ wydaje się, że 1.6 pakietu SDK nie jest już dostępny ... –

+0

v1.6 Pobieranie SDK jest [tutaj] (http://www.microsoft.com/en-us/download /details.aspx?id=28045), jeśli zdecydujesz się na tę trasę. –

+0

Zobacz moją odpowiedź poniżej. Ogólnie cmdlety _do_ czekają na zakończenie, z wyjątkiem 'Set-AzureDeployment', który oczywiście jest tym, który chcielibyśmy poczekać! Ale mamy odpowiednie bity, które musimy posortować. –

Odpowiedz

10

Tak, po dochodzeniu, moje pierwsze przypuszczenie było częściowo źle: wzywa do nowych poleceń cmdlet PowerShell zrobić czekać na ukończenie, wyjątkiem dla Set-AzureDeployment -newStatus "Running".

To dobrze, ponieważ nie musimy już mieć połączeń z Get-OperationStatus rozproszonych przez skrypt; jest jednak zły, ponieważ Set-AzureDeployment powoduje, że wdrożenie się kręci.

Możemy jednak zadzwonić pod numer Get-AzureDeployment i powtórzyć numer RoleInstanceList, aby dowiedzieć się, co się dzieje. Podobnie jak:

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

Dobra robota! Myślałem, czy istnieje alternatywny sposób dla 'Get-OperationStatus'. I jest to złe, aby usunąć go w nowszej wersji bez żadnego wyjaśnienia. –

0

ale jest jeden, który pojawia brakuje

Jeśli nie jest obsługiwany, należy znaleźć alternatywę. Na przykład użyj interfejsu API REST bezpośrednio, zamiast korzystać z PowerShell. Interfejs API REST pozwala nam śledzić żądania asynchroniczne: http://msdn.microsoft.com/en-us/library/windowsazure/ee460791.

Ponadto można przesłać żądanie funkcji na http://www.mygreatwindowsazureidea.com/forums/34192-windows-azure-feature-voting.

Pozdrawiam,

Ming Xu.

+0

Jest wiele rzeczy, które powodują, że polecenia cmdlet Powershell są trudne w użyciu w środowisku skryptowym, co jest tym, co chciałbym zrobić w naszym scenariuszu stałego wdrażania. Konieczność napisania własnego skryptu Powershell przeciwko API REST, aby upewnić się, że każda operacja jest kompletna, szczerze bierze herbatniki. –

+0

Zamieszczam sugestię tutaj: http://www.mygreatwindowsazureidea.com/forums/34192-windows-azure-feature-voting/suggestions/2980574-ensure-powershell-cmdlets-are-suitable-for-scr –