Using the
VirtualMachineConfigInfo
A backup application can also use
information contained in a
VirtualMachineConfigInfo
. If at
backup time you preserve all the
VirtualMachineConfigInfo
details
that describe the virtual machine, you can transfer much of this information
into a
VirtualMachineConfigSpec
to create
a virtual machine at restore time. However, some of the information in
VirtualMachineConfigInfo
is not
needed, and if used in the
Spec
, virtual machine creation can
fail. For example, a
VirtualMachineConfigSpec
that
contains information about so called “Default Devices” usually fails. The list
of default devices includes:
vim.vm.device.VirtualIDEController vim.vm.device.VirtualPS2Controller vim.vm.device.VirtualPCIController vim.vm.device.VirtualSIOController vim.vm.device.VirtualKeyboard vim.vm.device.VirtualVMCIDevice vim.vm.device.VirtualPointingDevice
However, other controllers and devices must be
explicitly included in the
VirtualMachineConfigSpec
.
Some information about devices is unneeded and can
cause problems if supplied. Each controller device has its
vim.vm.device.VirtualController.device
field,
which is an array of devices that report to the controller. The server rebuilds
this list when a virtual machine is created, using the (negative) device key
numbers supplied as a guide. The relationship between controller and device
must be preserved using negative key numbers in the same relationship as in the
hardware array of
VirtualMachineConfigInfo
.
The parent property for virtual disk backing
information must be set to null. In the sample code for creating a virtual
machine, find
vim.vm.device.VirtualDisk.FlatVer2BackingInfo
under SCSI disk one and SCSI disk two. The null setting is required because the
pre-backup snapshot causes the parent property to be populated with a reference
to the base disk.
One other configuration needs substitution.
VirtualMachineConfigInfo
contains the
cpuFeatureMask
, field, which is
an array of
HostCpuIdInfo
. The array entries
must be converted to
ArrayUpdateSpec
entries
containing the
VirtualMachineCpuIdInfoSpec
along with the “operation” field, which must contain the value
ArrayUpdateOperation::add
. The
VirtualMachineCpuIdInfoSpec
also
contains a
HostCpuIdInfo
array that you can
copy from the
cpuFeatureMask
array in
VirtualMachineConfigInfo
. These
items are not reflected in the sample code. Everything else can be copied
intact from
VirtualMachineConfigInfo
data.
To summarize: when creating a virtual machine in
which to restore virtual disk:
- Exclude default devices, andVirtualController.device, from theVirtualMachineConfigSpec.
- Set the parent virtual disk backing information (VirtualDisk.FlatVer2BackingInfo) to null.
- ConvertHostCpuIdInfoarray entries toArrayUpdateSpec, insertArrayUpdateOperation::add, and copy theHostCpuIdInfoarray fromcpuFeatureMaskintoVirtualMachineConfigInfo.