Adicionar artefatos a VMs do DevTest Labs
Este artigo descreve como adicionar artefatos às máquinas virtuais (VMs) do Azure DevTest Labs. Os artefatos especificam ações a serem executadas para provisionar uma VM, como executar scripts do Windows PowerShell, executar comandos Bash ou instalar software. Você pode usar parâmetros para personalizar os artefatos de acordo com suas próprias necessidades.
Os artefatos do DevTest Labs podem vir do repositório Git público do DevTest Labs ou de repositórios Git privados. Para criar seus próprios artefatos personalizados e armazená-los em um repositório, consulte Criar artefatos personalizados. Para adicionar seu repositório de artefatos a um laboratório para que os usuários do laboratório possam acessar os artefatos personalizados, consulte Adicionar um repositório de artefatos ao seu laboratório.
Os proprietários de laboratório do DevTest Labs podem especificar artefatos obrigatórios a serem instalados em todas as VMs de laboratório na criação. Para obter mais informações, consulte Especificar artefatos obrigatórios para VMs do DevTest Labs.
Você não pode alterar ou remover artefatos obrigatórios no momento da criação da VM, mas pode adicionar quaisquer artefatos individuais disponíveis. Este artigo descreve como adicionar artefatos disponíveis a VMs usando o portal do Azure ou o Azure PowerShell.
Adicionar artefatos a VMs a partir do portal do Azure
Você pode adicionar artefatos durante a criação de VMs ou adicionar artefatos a VMs de laboratório existentes.
Para adicionar artefatos durante a criação da VM:
Na página inicial do laboratório, selecione Adicionar.
Na página Escolha uma base, selecione o tipo de VM desejado.
Na tela Criar recurso de laboratório, selecione Adicionar ou Remover Artefatos.
Na página Adicionar artefatos, selecione a seta ao lado de cada artefato que você deseja adicionar à VM.
Em cada painel Adicionar artefato, insira quaisquer valores de parâmetro obrigatórios e opcionais e selecione OK. O artefato aparece em Artefatos selecionados e o número de atualizações de artefatos configurados.
Você pode alterar os artefatos depois de adicioná-los.
- Por padrão, os artefatos são instalados na ordem em que são adicionados. Para reorganizar a ordem, selecione as reticências ao lado do artefato na lista Artefatos selecionados e selecione Mover para cima, Mover para baixo, Mover para cima ou Mover para baixo.
- Para editar os parâmetros do artefato, selecione Editar para reabrir o painel Adicionar artefato .
- Para excluir o artefato da lista Artefatos selecionados , selecione Excluir.
Quando terminar de adicionar e organizar artefatos, selecione OK.
A tela Criar recurso de laboratório mostra o número de artefatos adicionados. Para adicionar, editar, reorganizar ou excluir os artefatos antes de criar a VM, selecione Adicionar ou Remover Artefatos novamente.
Depois de criar a VM, os artefatos instalados aparecem na página Artefatos da VM. Para ver detalhes sobre a instalação de cada artefato, selecione o nome do artefato.
Para instalar artefatos em uma VM existente:
Na página inicial do laboratório, selecione a VM na lista Minhas máquinas virtuais.
Na página VM, selecione Artefatos na barra de menu superior ou navegação à esquerda.
Na página Artefatos, selecione Aplicar artefatos.
Na página Adicionar artefatos, selecione e configure artefatos da mesma forma que para uma nova VM.
Quando terminar de adicionar artefatos, selecione Instalar. Os artefatos são instalados na VM imediatamente.
Adicionar artefatos a VMs usando o Azure PowerShell
Nota
Recomendamos que utilize o módulo Azure Az do PowerShell para interagir com o Azure. Para começar, consulte Instalar o Azure PowerShell. Para saber como migrar para o módulo do Az PowerShell, veja Migrar o Azure PowerShell do AzureRM para o Az.
O script PowerShell a seguir aplica um artefato a uma VM usando o cmdlet Invoke-AzResourceAction .
#Requires -Module Az.Resources
param
(
[Parameter(Mandatory=$true, HelpMessage="The ID of the subscription that contains the lab")]
[string] $SubscriptionId,
[Parameter(Mandatory=$true, HelpMessage="The name of the lab that has the VM")]
[string] $DevTestLabName,
[Parameter(Mandatory=$true, HelpMessage="The name of the VM")]
[string] $VirtualMachineName,
[Parameter(Mandatory=$true, HelpMessage="The repository where the artifact is stored")]
[string] $RepositoryName,
[Parameter(Mandatory=$true, HelpMessage="The artifact to apply to the VM")]
[string] $ArtifactName,
[Parameter(ValueFromRemainingArguments=$true)]
$Params
)
# Set the appropriate subscription
Set-AzContext -SubscriptionId $SubscriptionId | Out-Null
# Get the lab resource group name
$resourceGroupName = (Get-AzResource -ResourceType 'Microsoft.DevTestLab/labs' | Where-Object { $_.Name -eq $DevTestLabName}).ResourceGroupName
if ($resourceGroupName -eq $null) { throw "Unable to find lab $DevTestLabName in subscription $SubscriptionId." }
# Get the internal repository name
$repository = Get-AzResource -ResourceGroupName $resourceGroupName `
-ResourceType 'Microsoft.DevTestLab/labs/artifactsources' `
-ResourceName $DevTestLabName `
-ApiVersion 2016-05-15 `
| Where-Object { $RepositoryName -in ($_.Name, $_.Properties.displayName) } `
| Select-Object -First 1
if ($repository -eq $null) { "Unable to find repository $RepositoryName in lab $DevTestLabName." }
# Get the internal artifact name
$template = Get-AzResource -ResourceGroupName $resourceGroupName `
-ResourceType "Microsoft.DevTestLab/labs/artifactSources/artifacts" `
-ResourceName "$DevTestLabName/$($repository.Name)" `
-ApiVersion 2016-05-15 `
| Where-Object { $ArtifactName -in ($_.Name, $_.Properties.title) } `
| Select-Object -First 1
if ($template -eq $null) { throw "Unable to find template $ArtifactName in lab $DevTestLabName." }
# Find the VM in Azure
$FullVMId = "/subscriptions/$SubscriptionId/resourceGroups/$resourceGroupName`
/providers/Microsoft.DevTestLab/labs/$DevTestLabName/virtualmachines/$virtualMachineName"
$virtualMachine = Get-AzResource -ResourceId $FullVMId
# Generate the artifact id
$FullArtifactId = "/subscriptions/$SubscriptionId/resourceGroups/$resourceGroupName`
/providers/Microsoft.DevTestLab/labs/$DevTestLabName/artifactSources/$($repository.Name)`
/artifacts/$($template.Name)"
# Handle the input parameters to pass through
$artifactParameters = @()
# Fill the artifact parameter with the additional -param_ data and strip off the -param_
$Params | ForEach-Object {
if ($_ -match '^-param_(.*)') {
$name = $_ -replace '^-param_'
} elseif ( $name ) {
$artifactParameters += @{ "name" = "$name"; "value" = "$_" }
$name = $null #reset name variable
}
}
# Create a structure to pass the artifact data to the action
$prop = @{
artifacts = @(
@{
artifactId = $FullArtifactId
parameters = $artifactParameters
}
)
}
# Apply the artifact
if ($virtualMachine -ne $null) {
# Apply the artifact by name to the virtual machine
$status = Invoke-AzResourceAction -Parameters $prop -ResourceId $virtualMachine.ResourceId -Action "applyArtifacts" -ApiVersion 2016-05-15 -Force
if ($status.Status -eq 'Succeeded') {
Write-Output "##[section] Successfully applied artifact: $ArtifactName to $VirtualMachineName"
} else {
Write-Error "##[error]Failed to apply artifact: $ArtifactName to $VirtualMachineName"
}
} else {
Write-Error "##[error]$VirtualMachine was not found in the DevTest Lab, unable to apply the artifact"
}