PowerShell do AzureRM
Você pode usar o Powershell do Azure para ver quando as VMs estão agendadas para manutenção. As informações de manutenção planejada estão disponíveis no cmdlet Get-AzureRmVM quando você usa o parâmetro -status.
Get-AzureRmVM -ResourceGroupName rgName -Name vmName -Status
Você também pode obter o status de manutenção de todas as VMs em um grupo de recursos usando Get-AzureRmVM e não especificando uma VM.
Get-AzureRmVM -ResourceGroupName rgName -Status
A seguinte função do PowerShell usa seu ID de assinatura e imprime uma lista de VMs que estão agendadas para manutenção.
function MaintenanceIterator
{
Select-AzureRmSubscription -SubscriptionId $args[0]
$rgList= Get-AzureRmResourceGroup
for ($rgIdx=0; $rgIdx -lt $rgList.Length ; $rgIdx++)
{
$rg = $rgList[$rgIdx]
$vmList = Get-AzureRMVM -ResourceGroupName $rg.ResourceGroupName
for ($vmIdx=0; $vmIdx -lt $vmList.Length ; $vmIdx++)
{
$vm = $vmList[$vmIdx]
$vmDetails = Get-AzureRMVM -ResourceGroupName $rg.ResourceGroupName -Name $vm.Name -Status
if ($vmDetails.MaintenanceRedeployStatus )
{
Write-Output "VM: $($vmDetails.Name) IsCustomerInitiatedMaintenanceAllowed: $($vmDetails.MaintenanceRedeployStatus.IsCustomerInitiatedMaintenanceAllowed) $($vmDetails.MaintenanceRedeployStatus.LastOperationMessage)"
}
}
}
}
Link: Lidando com notificações de manutenção planejadas para máquinas virtuais Windows
Serviço de metadados do Azure
Eventos agendados é um Serviço de Metadados do Azure que fornece ao aplicativo tempo para se preparar para a manutenção de máquinas virtuais. Ele fornece informações sobre os próximos eventos de manutenção (por exemplo, reinicialização) para que seu aplicativo possa se preparar para eles e limitar a interrupção. Está disponível para todos os tipos de máquinas virtuais do Azure, incluindo PaaS e IaaS no Windows e no Linux.
# How to get scheduled events
function Get-ScheduledEvents($uri)
{
$scheduledEvents = Invoke-RestMethod -Headers @{"Metadata"="true"} -URI $uri -Method get
$json = ConvertTo-Json $scheduledEvents
Write-Host "Received following events: 'n" $json
return $scheduledEvents
}
# How to approve a scheduled event
function Approve-ScheduledEvent($eventId, $docIncarnation, $uri)
{
# Create the Scheduled Events Approval Document
$startRequests = [array]@{"EventId" = $eventId}
$scheduledEventsApproval = @{"StartRequests" = $startRequests; "DocumentIncarnation" = $docIncarnation}
# Convert to JSON string
$approvalString = ConvertTo-Json $scheduledEventsApproval
Write-Host "Approving with the following: 'n" $approvalString
# Post approval string to scheduled events endpoint
Invoke-RestMethod -Uri $uri -Headers @{"Metadata"="true"} -Method POST -Body $approvalString
}
function Handle-ScheduledEvents($scheduledEvents)
{
# Add logic for handling events here
}
######### Sample Scheduled Events Interaction #########
# Set up the scheduled events URI for a VNET-enabled VM
$localHostIP = "169.254.169.254"
$scheduledEventURI = 'http://{0}/metadata/scheduledevents?api-version=2017-03-01' -f $localHostIP
# Get events
$scheduledEvents = Get-ScheduledEvents $scheduledEventURI
# Handle events however is best for your service
Handle-ScheduledEvents $scheduledEvents
# Approve events when ready (optional)
foreach($event in $scheduledEvents.Events)
{
Write-Host "Current Event: 'n" $event
$entry = Read-Host "'nApprove event? Y/N"
if($entry -eq "Y" -or $entry -eq "y")
{
Approve-ScheduledEvent $event.EventId $scheduledEvents.DocumentIncarnation $scheduledEventURI
}
}
Link: Serviço de metadados do Azure: eventos agendados para VMs do Windows