DevTest Labs虚拟机自动启动

时间:2017-10-17 08:02:21

标签: azure-devops azure-virtual-machine azure-resource-manager azure-pipelines-release-pipeline azure-devtest-labs

有没有办法在DevTest Labs虚拟机上启用自动启动功能作为创建的一部分,即是否可以将其添加到VM的ARM模板中?

我目前通过Azure门户手动启用此功能,但我发现在从Team Services进行后续部署时会禁用它。

解决方案

受到以下Ashok接受的答案的启发,我设法将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

1 个答案:

答案 0 :(得分:2)

自动启动策略要求您在启用策略后显式选择VM并从其上下文菜单应用策略。这样你就不会轻易遇到不需要的虚拟机意外自动启动并导致意外消费的情况。

有关详细信息,请参阅以下文章:

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
}