DevTest Labs虚拟机自动启动
作为创建的一部分,是否可以在DevTest Labs虚拟机上启用自动启动功能,即是否可以将其添加到VM的ARM模板中?DevTest Labs虚拟机自动启动
我目前通过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
自动启动政策要求您要明确选择一个虚拟机,并在启用该策略后从其上下文菜单中应用该策略。这样,您就不会轻易陷入不必要的虚拟机意外自动启动并导致意外支出的情况。
有关详细信息,请参阅下面的文章:
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
}
感谢您的回复。当我在网上寻找可能的解决方案时(在提交这个SO问题之前),我遇到了上面的PS方法 - 这很好 - 我可以更加前瞻并使用该解决方案。对我来说,尽管服务器还没有被重新创建,自动启动仍然被禁用,但我仍然觉得很奇怪,我应该自己去管理它。 – smd
您如何从团队服务部署? –
作为Team Services发布定义的一部分,我们使用** DevTest Labs创建VM **任务来确保机器在deployemnt之前可用。我只能假设这个过程是什么导致机器失去**自动启动**标签。可能是由于在VM创建期间提供了ARM模板?也许还有另一种方法来处理这个问题,比如Ashok的答案中的PowerShell。 – smd
你能通过Get-AzureRmResource命令获得必要的信息吗? '$ VmResourceId =“subscriptions/$ subscriptionId/resourcegroups/$ labResourceGroup/providers/microsoft.devtestlab/labs/$ labName/virtualmachines/$ VmName” $ vm = Get-AzureRmResource -ResourceId $ VmResourceId -ExpandProperties' –