2012-07-05 8 views
5

I nuovi cmdlet di PowerShell (documentati qui: http://msdn.microsoft.com/en-us/library/windowsazure/jj152841) sono molto belli, ma non c'è uno che appare mancante:cmdlet di Azure PowerShell per 1.7, giugno 2012: cosa è successo a Get-OperationStatus?

Get-OperationStatus -WaitToComplete

Senza questo le mie operazioni Azure (ad esempio Set-AzureDeployment) non attendere il completamento.

Ciò rende difficile sapere quando ad es. un'istanza di staging è in esecuzione prima di eseguire uno scambio VIP.

Esistono alternative?

+0

Inoltre, non riesco a installare le versioni precedenti dei cmdlet di PowerShell; non riescono con il correttore delle dipendenze, poiché sembra che 1.6 dell'SDK non sia più disponibile ... –

+0

v1.6 Il download dell'SDK è [qui] (http://www.microsoft.com/en-us/download /details.aspx?id=28045), nel caso in cui decidessi di seguire quella rotta. –

+0

Vedere la mia risposta qui sotto. In generale i cmdlet _do_ attendono il completamento, tranne per 'Set-AzureDeployment', che è ovviamente quello che ci piacerebbe aspettare! Ma abbiamo i bit rilevanti di cui avremo bisogno per sistemare questo. –

risposta

10

Così, dopo un'indagine, la mia supposizione iniziale era in parte sbagliata: le chiamate verso i nuovi cmdlet di PowerShell fare attesa per il completamento con successo, ad eccezione per Set-AzureDeployment -newStatus "Running".

Questo è buono, poiché non è più necessario effettuare chiamate allo Get-OperationStatus sparse attraverso lo script; è un problema, tuttavia, poiché Set-AzureDeployment lascia la distribuzione in rotazione.

Possiamo chiamare lo Get-AzureDeployment, tuttavia, e scorrere lo RoleInstanceList per capire cosa sta succedendo. Così:

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

Buon lavoro! Stavo pensando se c'è un modo alternativo per "Get-OperationStatus". Ed è brutto rimuoverlo nella versione più recente senza spiegazioni. –

0

ma c'è uno che appare mancante

Se non è supportato, quindi si prega di trovare un'alternativa. Ad esempio, utilizzare direttamente l'API REST anziché utilizzare PowerShell. L'API REST ci consente di tenere traccia delle richieste asincrone: http://msdn.microsoft.com/en-us/library/windowsazure/ee460791.

Inoltre, è anche possibile inviare una richiesta di funzione su http://www.mygreatwindowsazureidea.com/forums/34192-windows-azure-feature-voting.

migliori saluti,

Ming Xu.

+0

C'è molto che rende i cmdlet di PowerShell difficili da usare in un ambiente con script, che è quello che mi piacerebbe fare per il nostro scenario di distribuzione continua. Dovendo scrivere il mio script Powershell contro l'API REST per assicurarmi che ogni operazione sia atomicamente completa, si prende francamente il biscotto. –

+0

Ho postato il suggerimento qui: http://www.mygreatwindowsazureidea.com/forums/34192-windows-azure-feature-voting/suggestions/2980574-ensure-the-powershell-cmdlets-are-suitable-for-scr –

Problemi correlati