Condividi tramite


Aggiungere elementi alle macchine virtuali di DevTest Labs

Questo articolo descrive come aggiungere elementi alle macchine virtuali di Azure DevTest Labs. Gli artefatti specificano azioni da eseguire per effettuare il provisioning di una macchina virtuale, ad esempio l'esecuzione di script di Windows PowerShell, l'esecuzione di comandi Bash o l'installazione di software. È possibile usare i parametri per personalizzare gli artefatti in base alle proprie esigenze.

Gli artefatti di DevTest Labs possono provenire dal repository Git di DevTest Labs pubblico o da repository Git privati. Per creare elementi personalizzati e archiviarli in un repository, vedere Creare artefatti personalizzati. Per aggiungere il repository degli artefatti a un lab in modo che gli utenti del lab possano accedere agli artefatti personalizzati, vedere Aggiungere un repository di artefatti al lab.

I proprietari dei lab devTest Labs possono specificare gli artefatti obbligatori da installare in tutte le macchine virtuali del lab al momento della creazione. Per altre informazioni, vedere Specificare artefatti obbligatori per le macchine virtuali di DevTest Labs.

Non è possibile modificare o rimuovere artefatti obbligatori in fase di creazione della macchina virtuale, ma è possibile aggiungere tutti i singoli artefatti disponibili. Questo articolo descrive come aggiungere elementi disponibili alle macchine virtuali usando il portale di Azure o Azure PowerShell.

Aggiungere artefatti alle macchine virtuali dalla portale di Azure

È possibile aggiungere artefatti durante la creazione di macchine virtuali o aggiungere artefatti alle macchine virtuali del lab esistenti.

Per aggiungere elementi durante la creazione della macchina virtuale:

  1. Nella home page del lab selezionare Aggiungi.

  2. Nella pagina Scegliere una base selezionare il tipo di macchina virtuale desiderato.

  3. Nella schermata Crea risorsa lab selezionare Aggiungi o Rimuovi artefatti.

  4. Nella pagina Aggiungi elementi selezionare la freccia accanto a ogni artefatto da aggiungere alla macchina virtuale.

  5. In ogni riquadro Aggiungi artefatto immettere i valori dei parametri obbligatori e facoltativi e quindi selezionare OK. L'artefatto viene visualizzato in Elementi selezionati e il numero di aggiornamenti degli artefatti configurati.

    Screenshot che mostra l'aggiunta di elementi nel riquadro Aggiungi elementi.

  6. È possibile modificare gli artefatti dopo averli aggiunti.

    • Per impostazione predefinita, gli artefatti vengono installati nell'ordine in cui vengono aggiunti. Per ridisporre l'ordine, selezionare i puntini di sospensione ... accanto all'artefatto nell'elenco Artefatti selezionati e selezionare Sposta su, Sposta verso il basso, Sposta in alto, Sposta in alto o Sposta in alto o Sposta in basso.
    • Per modificare i parametri dell'artefatto, selezionare Modifica per riaprire il riquadro Aggiungi artefatto .
    • Per eliminare l'artefatto dall'elenco Artefatti selezionati, selezionare Elimina.
  7. Al termine dell'aggiunta e della disposizione degli artefatti, selezionare OK.

  8. La schermata Crea risorsa lab mostra il numero di elementi aggiunti. Per aggiungere, modificare, ridisporre o eliminare gli artefatti prima di creare la macchina virtuale, selezionare di nuovo Aggiungi o Rimuovi artefatti .

Dopo aver creato la macchina virtuale, gli artefatti installati vengono visualizzati nella pagina Artefatti della macchina virtuale. Per visualizzare i dettagli sull'installazione di ogni artefatto, selezionare il nome dell'artefatto.

Per installare gli artefatti in una macchina virtuale esistente:

  1. Nella home page del lab selezionare la macchina virtuale dall'elenco Macchine virtuali personali.

  2. Nella pagina della macchina virtuale selezionare Artefatti nella barra dei menu in alto o nel riquadro di spostamento a sinistra.

  3. Nella pagina Artefatti selezionare Applica artefatti.

    Screenshot che mostra il riquadro Artefatti per una V M esistente.

  4. Nella pagina Aggiungi elementi selezionare e configurare gli artefatti come per una nuova macchina virtuale.

  5. Al termine dell'aggiunta di elementi, selezionare Installa. Gli artefatti vengono installati immediatamente nella macchina virtuale.

Aggiungere artefatti alle macchine virtuali usando Azure PowerShell

Nota

È consigliabile usare il modulo Azure Az PowerShell per interagire con Azure. Per iniziare, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo AZ PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.

Lo script di PowerShell seguente applica un artefatto a una macchina virtuale usando il 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"
}

Passaggi successivi