es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Desasignar Azure VMSS basado en etiqueta y estado de energía actual.

Estoy intentando obtener una lista de VMSS que tengan una etiqueta específica y que aún estén activas/asignadas, y luego desasignar esas VMSS.

No he encontrado ninguna propiedad en Get-AzVmss que muestre el estado de asignación o alimentación de las VMSS.

Sin embargo, descubrí que si profundizo en las instancias mismas, puedo obtener el estado de alimentación de ellas usando Get-AzVmssVM.

Puedo lograr que esto ocurra a nivel de la instancia y apagarlas, pero me gustaría desasignar la VMSS en sí.

Esto formará parte de un canal de implementación de DevOps, por lo que necesito asegurarme de que sea confiable y consistente. Se ejecutará como una tarea de PowerShell de Azure.

¿Alguien puede ayudarme con lo que me falta aquí? Me encantaría hacer esto a un nivel más alto y ni siquiera entrar en las instancias, pero no pude ver cómo hacerlo (asumiendo que sea posible).

Aquí está el código que tengo hasta ahora:

$RedTagValue = "Red"
$RGName = "test-rg"
$Resources = Get-AzVmss -ResourceGroupName $RGName | Where-Object { $_.Tags.Values -eq $RedTagValue }

foreach ($Resource in $Resources) {
    $vmss = Get-AzVmssVM -ResourceGroupName $RGName -VMScaleSetName $Resource.Name
    foreach ($vm in $vmss) {

    $instances = Get-AzVmssVM -ResourceGroupName $RGName -VMScaleSetName $Resource.Name -InstanceId $vm.InstanceId -InstanceView

    if ($instances.Statuses[1].Code -notcontains "PowerState/deallocated") {
        Write-Output "Apagando" #Necesito algún código aquí para mostrar las VMSS que se están apagando y también alguna lógica para apagarlas
    }
    else {
        Write-Output "No hay máquinas para apagar"
    }

}

}

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que has recuperado correctamente el VMSS que tiene una etiqueta específica usando Get-AzVmss, y puedes obtener el estado de energía de las instancias de VMSS usando Get-AzVmssVM.

    Para desasignar el VMSS en sí, puedes usar el cmdlet Stop-AzVmss. Sin embargo, ten en cuenta que esto desasignará todas las instancias dentro del VMSS, no solo las específicas con cierta etiqueta.

    Puedes modificar tu código para desasignar el VMSS en sí reemplazando el bloque if con lo siguiente:

    if ($instances.Statuses[1].Code -notcontains "PowerState/deallocated") {
        Write-Output "Desasignando VMSS $Resource.Name"
        Stop-AzVmss -ResourceGroupName $RGName -VMScaleSetName $Resource.Name -Force
    }
    else {
        Write-Output "No hay máquinas para desasignar en VMSS $Resource.Name"
    }
    

    Esto verificará si alguna instancia dentro del VMSS no está desasignada y, de ser así, desasignará el VMSS completo usando Stop-AzVmss. El parámetro -Force se usa para forzar la desasignación sin solicitar confirmación.

    En cuanto a mostrar los VMSS que se están apagando o desasignando, puedes modificar las sentencias Write-Output en consecuencia. Por ejemplo, puedes cambiar Write-Output "Apagando" a Write-Output "Desasignando VMSS $Resource.Name".

    Espero que esto te ayude. Avísame si tienes alguna otra pregunta.

Comments are closed.