Adicionar artefatos às VMs do DevTest Labs
Este artigo descreve como adicionar artefatos às VMs (máquinas virtuais) do Azure DevTest Labs. Os artefatos especificam as ações a serem tomadas para provisionar uma VM, como a execução de scripts Windows PowerShell, a execução de comandos Bash ou a instalação de software. É possível usar parâmetros para personalizar os artefatos para 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 o 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 do laboratório do DevTest Labs podem especificar os artefatos obrigatórios a serem instalados em todas as VMs do laboratório na criação. Para obter mais informações, consulte Especificar artefatos obrigatórios para as VMs do DevTest Labs.
Não é possível alterar ou remover artefatos obrigatórios no momento da criação da VM, mas você pode adicionar quaisquer artefatos individuais disponíveis. Este artigo descreve como adicionar artefatos disponíveis às VMs usando o portal do Azure ou o Azure PowerShell.
Adicionar artefatos a VMs do portal do Azure
É possível adicionar artefatos durante a criação da VM ou adicionar artefatos para as 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 escolher uma base, selecione o tipo de VM desejado.
Na tela Criar recurso do 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 os valores de parâmetro obrigatórios e opcionais e, em seguida, selecione OK. O artefato aparece em Artefatos selecionados, e o número de atualizações de artefatos configuradas.
É possível alterar os artefatos depois de adicioná-los.
- Por padrão, os artefatos são instalados na ordem em que são adicionados. Para reorganizar o pedido, selecione as reticências ... ao lado do artefato na lista Artefatos selecionados e selecione mover para cima, mover para baixo, ou mover para cimaou 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 você terminar de adicionar e organizar, 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:
No página inicial do laboratório, selecione a VM na lista Minhas máquinas virtuais.
Na página da VM, selecione Artefatos na barra de menus 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 você terminar de adicionar artefatos, selecione Instalar. Os artefatos são instalados na VM imediatamente.
Adicionar artefatos a VMs usando o Azure PowerShell
Observação
Recomendamos que você use o módulo Az PowerShell do Azure para interagir com o Azure. Para começar, consulte Instalar o Azure PowerShell. Para saber como migrar para o módulo Az PowerShell, confira Migrar o Azure PowerShell do AzureRM para o Az.
O script do 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"
}