Автоматический запуск виртуальной машины DevTest Labs

Есть ли способ включить функцию автоматического запуска на виртуальной машине DevTest Labs как часть создания, то есть можно ли добавить ее в шаблон ARM виртуальной машины?

В настоящее время я включаю это вручную через портал Azure, но я обнаружил, что он отключается при последующих развертываниях из Team Services.

Решение

Вдохновленный принятым ответом от Ашока ниже, мне удалось настроить и упростить сценарий PowerShell до следующего...

Param([string] $resourceId)

$tags = (Get-AzureRmResource -ResourceId $resourceId).Tags

if (-Not ($tags) -Or -Not($tags.ContainsKey('AutoStartOn'))) {
  $tags += @{ AutoStartOn=$true; }
}

if (-Not ($tags) -Or -Not($tags.ContainsKey('AlwaysOn'))) {
  $tags += @{ AlwaysOn=$true; }
}

Set-AzureRmResource -ResourceId $resourceId -Tag $tags -Force

comment
Как вы выполняете последующие развертывания из Team Services?   -  person starian chen-MSFT    schedule 19.10.2017
comment
В рамках определения выпуска в Team Services мы используем задачу DevTest Labs Create VM, чтобы убедиться, что машина доступна перед развертыванием. Я могу только предположить, что именно из-за этого процесса машины теряют свой тег auto-start. Может быть, из-за шаблона ARM, предоставленного при создании виртуальной машины? Возможно, есть другой способ справиться с этим, например PowerShell в ответе Ашока ниже.   -  person smd    schedule 19.10.2017
comment
Не могли бы вы получить необходимую информацию с помощью команды Get-AzureRmResource? $VmResourceId = "subscriptions/$subscriptionId/resourcegroups/$labResourceGroup/providers/microsoft.devtestlab/labs/$labName/virtualmachines/$VmName" $vm = Get-AzureRmResource -ResourceId $VmResourceId -ExpandProperties   -  person starian chen-MSFT    schedule 19.10.2017


Ответы (1)


Политика автозапуска требует, чтобы вы явно выбрали виртуальную машину и применили политику из ее контекстного меню после включения политики. Таким образом, вы не столкнетесь с ситуацией, когда нежелательные виртуальные машины случайно запускаются автоматически и вызывают непредвиденные расходы.

Дополнительные сведения см. в следующей статье:

https://azure.microsoft.com/en-us/updates/azure-devtest-labs-schedule-vm-auto-start/

Обновление:

Вы можете попробовать следующую функцию PS. Обратите внимание, что коллекция тегов должна быть заменена целиком. Вот почему вы видите логику, которая гарантирует только добавление к коллекции или изменение существующих значений, если они уже существуют. В противном случае вы будете удалять другие теги.

    function Enable-AzureDtlVmAutoStart
{
    [CmdletBinding()]
    param(
        [string] $ResourceId,
        [switch] $AlwaysOn
    )

    $autoStartOnTagName = 'AutoStartOn'
    $alwaysOnTagName = 'AlwaysOn'

    $labVm = Get-AzureRmResource -ResourceId $ResourceId
    $tags = $labVm.Tags

    # Undefined tags collection can happen if the Lab VM never had any tags set.
    if (-not $tags)
    {
        $tags = @(@{},@{})
    }

    # Update the tags if they already exist in the collection.
    $tags | % {
        if ($_.Name -eq $autoStartOnTagName)
        {
            $_.Value = $true
        }
        if ($_.Name -eq $alwaysOnTagName)
        {
            $_.Value = $true
        }
    }
    # Otherwise, create new tags.
    if (-not ($tags | ? { $_.Name -eq $autoStartOnTagName }))
    {
        $tags += @{Name=$autoStartOnTagName;Value=$true}
    }
    if (-not ($tags | ? { $_.Name -eq $alwaysOn }))
    {
        $tags += @{Name=$alwaysOnTagName;Value=$AlwaysOn}
    }

    Set-AzureRmResource -ResourceId $ResourceId -Tag $tags -Force
}
person AshokPeddakotla-MSFT    schedule 17.10.2017
comment
Спасибо за ответ. Когда я искал возможные решения для этого в Интернете (перед отправкой этого вопроса SO), я наткнулся на описанный выше подход PS - и это нормально - я могу больше двигаться вперед и использовать это решение. Мне все еще кажется странным, что автозапуск отключается, хотя сервер не был воссоздан, и что мне нужно самому управлять этим. - person smd; 18.10.2017