2012-07-05 8 views
5

Los nuevos cmdlets de PowerShell (documentado aquí: http://msdn.microsoft.com/en-us/library/windowsazure/jj152841) aspecto precioso, pero hay uno que parece que falta:cmdlets de Azure Powershell para 1.7, junio de 2012: ¿qué pasó con Get-OperationStatus?

Get-OperationStatus -WaitToComplete

Sin esto mis operaciones Azure (por ejemplo Set-AzureDeployment) No espere a su finalización.

Esto hace que sea difícil saber cuándo, por ejemplo, una instancia de ensayo se está ejecutando antes de hacer un intercambio VIP.

¿Hay alguna alternativa?

+0

Además, parece que no puedo instalar las versiones anteriores de los cmdlets de Powershell; fallan en el comprobador de dependencias, ya que parece que 1.6 del SDK ya no está disponible ... –

+0

v1.6 La descarga del SDK es [aquí] (http://www.microsoft.com/en-us/download) /details.aspx?id=28045), en caso de que decida ir por esa ruta. –

+0

Ver mi respuesta a continuación. En general, los cmdlets _do_ esperan a completarse, excepto 'Set-AzureDeployment', que es, por supuesto, el que nos gustaría esperar. Pero tenemos los bits relevantes que necesitaremos para ordenar esto. –

Respuesta

10

Así que, después de la investigación, mi suposición inicial fue en parte equivocada: las llamadas a los nuevos cmdlets de PowerShell hacer esperar que se complete con éxito, excepto para Set-AzureDeployment -newStatus "Running".

Esto es bueno, ya que no necesitamos tener llamadas a Get-OperationStatus dispersas a través de la secuencia de comandos; es malo, sin embargo, ya que Set-AzureDeployment deja la implementación girando hacia arriba.

Sin embargo, podemos llamar al Get-AzureDeployment y repetir el RoleInstanceList para descubrir qué está pasando. Como tal:

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

¡Buen trabajo! Estaba pensando si hay una forma alternativa para 'Get-OperationStatus'. Y es malo eliminarlo en la versión más nueva sin ninguna explicación. –

0

pero hay uno que parece que faltan

Si no es compatible, por favor, encontrar una alternativa. Por ejemplo, use la API REST directamente en lugar de usar PowerShell. La API REST nos permite rastrear solicitudes de sincronización: http://msdn.microsoft.com/en-us/library/windowsazure/ee460791.

Además, también puede enviar una solicitud de función al http://www.mygreatwindowsazureidea.com/forums/34192-windows-azure-feature-voting.

Saludos cordiales,

Ming Xu.

+0

Hay muchas cosas que hacen que los cmdlets de Powershell sean difíciles de usar en un entorno con guiones, que es lo que me gustaría hacer para nuestro escenario de implementación continua. Tener que escribir mi propia secuencia de comandos de Powershell contra la API REST para asegurarme de que cada operación está completamente completa toma francamente la galleta. –

+0

He publicado la sugerencia aquí: http://www.mygreatwindowsazureidea.com/forums/34192-windows-azure-feature-voting/suggestions/2980574-ensure-the-powershell-cmdlets-are-suitable-for-scr –

Cuestiones relacionadas