You can add devices to a virtual machine during creation using the VirtualMachineConfigSpec.deviceChange property, which is a VirtualDeviceSpec. You specify the host device that the virtual device should map to by using a backing object. A backing object represents the host device associated with a virtual device.
To add a device to a virtual machine, you must first find out which devices are supported on the corresponding ESXi host, and then specify a VirtualDevice object. Perform these tasks to add a device to a virtual machine:
Procedure
- Find out which devices your ESXi system supports by calling the QueryConfigOption method, which you can access through the VirtualMachine.environmentBrowser property. The method returns a VirtualMachineConfigOption data object that specifies what the ESXi supports. For example, VirtualMachineConfigOption.hardwareOptions includes information about supported CPU and memory and an array of VirtualDeviceOption data objects.
Note:
You cannot use the QueryConfigOption method to create another instance of a default device. If you attempt to add a default device, such as an IDE controller, the server ignores the operation.
- Specify the backing information object for the device. The actual process for defining the object differs for different objects. For example, for a CD-ROM passthrough device, you use a VirtualCdromPassthroughBackingInfo device. The VirtualDevice.backing property is a VirtualDeviceBackingInfo object which is extended by devices.
The following code fragment adds a CD-ROM passthrough device:
VirtualCdromPassthroughBackingInfo vcpbi = new VirtualCdromPassthroughBackingInfo();
// Does the virtual device have exclusive access to the CD-ROM device?
vcpbi.setExclusive(false);
// Specifies the device name.
vcpbi.setDeviceName('cdrom0');
- Specify connection information for the device.
The VirtualDevice.connectable property is a VirtualDeviceConnectInfo data object. This object provides information about restrictions on removing the device while a virtual machine is running. This property is null if the device is not removable.
VirtualDeviceConnectInfo vdci = new VirtualDeviceConnectInfo();
// Allow the guest to control whether the virtual device is connected?
vdci.setAllowGuestControl(false);
// Is the device currently connected?
vdci.setConnected(true);
// Connect the device when the virtual machine starts?
vdci.setStartConnected(true);
- Define the controller key, the virtual device key, and the unit number.
You define these items with the integer properties: controllerKey, key, and unitNumber. See the VirtualDevice data object in the API Reference.
- Specify device Information.
The deviceInfo property is a Description data object that has a name property and a summary property. You can supply a string value for each, describing the device.
Description vddesc = new Description();
vddesc.setLabel('CD-ROM Device cdrom0');
vddesc.setSummary('The CD-ROM device for this virtual machine.');
- Specify the virtual device as the device property of a VirtualDeviceConfigSpec.
- Specify the VirtualDeviceConfigSpec as the deviceChange property to the VirtualMachineConfigSpec that you pass in to a Folder.CreateVM_Task or VirtualMachine.ReconfigVM_Task method.
Example
Here’s the complete code fragment for a CD-ROM passthrough device:
VirtualDevice vd = new VirtualDevice();
vd.setBacking(vcpbi);
vd.setConnectable(vdci);
vd.setControllerKey(257);
vd.setDeviceInfo(vddesc);
vd.setKey(2);
vd.setUnitNumber(25);