Parentless Instant Clone for vSphere 6.7

This commit is contained in:
William Lam
2018-04-30 05:22:46 -07:00
parent b5800f0eff
commit 8694c40210

View File

@@ -0,0 +1,68 @@
Function New-InstantClone {
<#
.NOTES
===========================================================================
Created by: William Lam
Date: Apr 29, 2018
Organization: VMware
Blog: www.virtuallyghetto.com
Twitter: @lamw
===========================================================================
.SYNOPSIS
This function demonstrates the use of the new "Parentless" Instant Clone
API that was introduced in vSphere 6.7
.DESCRIPTION
Function to create new "Parentless" Instant Clones in vSphere 6.7
.EXAMPLE
$SourceVM = "Foo"
$newVMName = Foo-IC-1
$guestCustomizationValues = @{
"guestinfo.ic.hostname" = $newVMName
"guestinfo.ic.ipaddress" = "192.168.30.10"
"guestinfo.ic.netmask" = "255.255.255.0"
"guestinfo.ic.gateway" = "192.168.30.1"
"guestinfo.ic.dns" = "192.168.30.1"
}
New-InstantClone -SourceVM $SourceVM -DestinationVM $newVMName -CustomizationFields $guestCustomizationValues
.NOTES
Make sure that you have both a vSphere 6.7 env (VC/ESXi) as well as
as the latest PowerCLI 10.1 installed which is reuqired to use vSphere 6.7 APIs
#>
param(
[Parameter(Mandatory=$true)][String]$SourceVM,
[Parameter(Mandatory=$true)][String]$DestinationVM,
[Parameter(Mandatory=$true)][Hashtable]$CustomizationFields
)
$vm = Get-VM -Name $SourceVM
$config = @()
$CustomizationFields.GetEnumerator() | Foreach-Object {
$optionValue = New-Object VMware.Vim.OptionValue
$optionValue.Key = $_.Key
$optionValue.Value = $_.Value
$config += $optionValue
}
# SourceVM must either be running or running but in Frozen State
if($vm.PowerState -ne "PoweredOn") {
Write-Host -ForegroundColor Red "Instant Cloning is only supported on a PoweredOn or Frozen VM"
break
}
# SourceVM == Powered On
if((Get-VM $SourceVM).ExtensionData.Runtime.InstantCloneFrozen -eq $false) {
Write-Host -ForegroundColor Red "Instant Cloning from a PoweredOn VM has not been implemented"
break
}
$spec = New-Object VMware.Vim.VirtualMachineInstantCloneSpec
$locationSpec = New-Object VMware.Vim.VirtualMachineRelocateSpec
$spec.Config = $config
$spec.Location = $locationSpec
$spec.Name = $DestinationVM
Write-Host "Creating Instant Clone $DestinationVM ..."
$task = $vm.ExtensionData.InstantClone_Task($spec)
$task1 = Get-Task -Id ("Task-$($task.value)")
$task1 | Wait-Task | Out-Null
}