Adición de artefactos a máquinas virtuales de DevTest Labs

En este artículo se describe cómo agregar artefactos a máquinas virtuales (VM) de Azure DevTest Labs. Los artefactos especifican acciones que se deben realizar para aprovisionar una máquina virtual, como ejecutar scripts de Windows PowerShell, ejecutar comandos de Bash o instalar software. Puede usar parámetros para personalizar los artefactos de acuerdo con sus necesidades.

Los artefactos de DevTest Labs pueden provenir del repositorio de Git público de DevTest Labs o de repositorios de Git privados. Para crear sus propios artefactos personalizados y almacenarlos en un repositorio, consulte Creación de artefactos personalizados. Para agregar el repositorio de artefactos a un laboratorio para que los usuarios del laboratorio puedan acceder a los artefactos personalizados, consulte Adición de un repositorio de artefactos al laboratorio.

Los propietarios del laboratorio de DevTest Labs pueden especificar los artefactos obligatorios que se instalarán en todas las máquinas virtuales de laboratorio durante la creación. Para más información, consulte Especificación de artefactos obligatorios para su laboratorio de Azure DevTest Labs.

No puede cambiar ni quitar artefactos obligatorios en el momento de la creación de la máquina virtual, pero puede agregar los artefactos individuales disponibles. En este artículo se describe cómo agregar artefactos disponibles a las máquinas virtuales mediante Azure Portal o Azure PowerShell.

Adición de artefactos a las máquinas virtuales desde Azure Portal

Puede agregar artefactos durante la creación de máquinas virtuales o agregarlos a las máquinas virtuales de laboratorio existentes.

Para agregar artefactos durante la creación de la máquina virtual:

  1. En la página principal del laboratorio, seleccione Agregar.

  2. En la página Elegir una base, seleccione el tipo de máquina virtual que prefiera.

  3. En la pantalla Crear recurso de laboratorio, seleccione Agregar o quitar artefactos.

  4. En la página Agregar artefactos, seleccione la flecha situada junto a cada artefacto que quiera agregar a la máquina virtual.

  5. En cada panel Agregar artefacto, escriba los valores de parámetro obligatorios y opcionales y, luego, seleccione Aceptar. El artefacto aparece en Artefactos seleccionados y el número de artefactos configurados se actualiza.

    Captura de pantalla que muestra la adición de artefactos en el panel Agregar artefactos.

  6. Puede cambiar los artefactos después de agregarlos.

    • De forma predeterminada, los artefactos se instalan en el orden en que se agregan. Para reorganizar el orden, seleccione los puntos suspensivos ... junto al artefactos en la lista Artefactos seleccionados y seleccione Subir, Bajar, Mover al principio o Mover al final.
    • Para editar los parámetros del artefacto, seleccione Editar para volver a abrir el panel Agregar artefacto.
    • Para eliminar el artefacto de la lista Artefactos seleccionados, elija Eliminar.
  7. Cuando haya terminado de agregar y organizar los artefactos, seleccione Aceptar.

  8. La pantalla Crear recurso de laboratorio muestra el número de artefactos agregados. Para agregar, editar, reorganizar o eliminar los artefactos antes de crear la máquina virtual, seleccione de nuevo Agregar o quitar artefactos.

Después de crear la máquina virtual, los artefactos instalados aparecen en la página Artefactos de la máquina virtual. Para ver los detalles de la instalación de cada artefacto, seleccione el nombre del artefacto.

Para instalar artefactos en una máquina virtual existente:

  1. En la página principal del laboratorio, seleccione la máquina virtual en la lista Mis máquinas virtuales.

  2. En la página de la máquina virtual, seleccione Artefactos en la barra de menús superior o en el panel de navegación izquierdo.

  3. En la página Artefactos, seleccione Aplicar artefactos.

    Captura de pantalla que muestra el panel Artefactos para una V M existente.

  4. En la página Agregar artefactos, seleccione y configure los artefactos igual que para una nueva máquina virtual.

  5. Cuando haya terminado de agregar artefactos, seleccione Instalar. Los artefactos se instalan inmediatamente en la máquina virtual.

Adición de artefactos a máquinas virtuales mediante Azure PowerShell

Nota:

Se recomienda usar el módulo Azure Az de PowerShell para interactuar con Azure. Consulte Instalación de Azure PowerShell para empezar. Para más información sobre cómo migrar al módulo Az de PowerShell, consulte Migración de Azure PowerShell de AzureRM a Az.

El siguiente script de PowerShell aplica un artefacto a una máquina virtual mediante el 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"
}

Pasos siguientes