VMware Global Community
rsicilia
Expert
Expert

vSphere Linked Clone script

I LinkedClone, così come siamo abituati ad utilizzarli in Horizon View, non sono disponibili in un ambiente "solo" vSphere ma può capitare di voler gestire degli albienti applicativi come LinkedClone di una sistema "master". Già da tempo è disponibile una procedura, ovviamente ufficiosa, per la creazione di LinkedClone su vSphere ma eseguire i passi a mano può comportare un eccessivo dispendio di tempo oltre ad incappare in banali errori.

In questo post ho riportato e spiegato una script per automatizzare un po' la procedura in questione e di seguito ne illustro i passaggi.

Premessa: la VM indentificata come master deve essere stata configurata secondo le proprie esigenze, spenta e, una volta completato lo shutdown, è necessario eseguire una snapshot (nome a piacere).

Per prima cosa ci connettiamo al vCenter e definiamo un po’ di variabili, in particolare il nome della VM master, il path dove troviamo i files a livello ESXi/Datastore, la directory di lavoro temporanea ed il nome della VM clone che creeremo:

Add-PSSnapin VMware.VimAutomation.Core | Out-Null

echo "Connessione verso vCenter Server..."

Connect-VIServer -Server 10.0.0.1 -User administrator@vsphere.local -Password pwd -WarningAction SilentlyContinue

echo ""

$vmname = "VM-MASTER"

$path = "/vmfs/volumes/xxxxxxxx-yyyyyyyy-zzzz-wwwwwwwwwwww/$vmname/"

$tempDir = "c:\LINKED-CLONE"

$cloneName = "VM-CLONE1"

Successivamente identifichiamo la VM e definiamo un “mount point” per il Datastore che la ospita così da scaricare i files che ci interessano:

$master = Get-VM -Name $vmname

echo "Procedura di gestione LINKED-CLONE per la guest $vmname"

$datastore = Get-Datastore "DS-LOCAL"

New-PSDrive -Location $datastore -Name ds -PSProvider VimDatastore -Root "" | out-null

echo "Download VMX file..."

Copy-DatastoreItem "ds:\$vmname\*.vmx" "$tempDir\$cloneName.vmx"

echo "Download SNAP file..."

Copy-DatastoreItem "ds:\$vmname\*-000001.vmdk" "$tempDir\"

echo "Download DELTA file..."

Copy-DatastoreItem "ds:\$vmname\*-000001-delta.vmdk" "$tempDir\"

I file scaricati sono la base per la nuova VM e vanno opportunamente modificati. Si tratta di cambiare pochi parametri quindi torna comoda la PowerShell:

echo "Edit VMX file"

$vmx = Get-content –path "$tempDir\$cloneName.vmx"

$vmx_new = $vmx -replace "displayName = ""$vmname""", "displayName = ""$cloneName"""

Set-content "$tempDir\$cloneName.vmx" $vmx_new

echo "Verifica file name per $master"

$file = Get-ChildItem -path $tempDir -Filter *-000001.vmdk

$filename = $file.Name

echo "Identificato file $filename"

echo "Edit SNAP file"

$vmdk = Get-content –path "$tempDir\$filename"

$vmdk_new = $vmdk -replace "parentFileNameHint=""", "parentFileNameHint=""$path"

Set-content "$tempDir\$filename" $vmdk_new

Infine i files vengono caricati nel Datastore e la nuova VM aggiunta all’inventory:

echo "Upload..."

New-Item -Path "ds:\$cloneName\" -ItemType Directory | out-null

Copy-DatastoreItem "$tempDir\$cloneName.vmx" "ds:\$cloneName\"

Copy-DatastoreItem "$tempDir\*-000001.vmdk" "ds:\$cloneName\"

Copy-DatastoreItem "$tempDir\*-000001-delta.vmdk" "ds:\$cloneName\"

echo "Inventory nuova VM..."

New-VM -VMFilePath "[DS-LOCAL] $cloneName/$cloneName.vmx" -ResourcePool "MyPool"

echo "Done!"

La nuova VM utilizzerà, in sola lettura, il file VMDK della VM master e scriverà le proprie modifiche nei delta disk posizionati nella propria directory. Ovviamente la VM master non potrà subire modifiche ne potrà essere accesa in quanto comprometterebbe il funzionamento dei Linked Clone: in caso sia necessario aggiornare la copia originale sarà anche necessario rimuovere i Linked Clone e rigenerarli al termine delle modifiche.

Rocco Sicilia [aka: BrC] - http://www.roccosicilia.it - VTSP 4-5, VCP 4-5, vExpert 2013/2014
0 Kudos
0 Replies