in src/main/java/com/vmware/vim25/mox/VirtualMachineDeviceManager.java [155:215]
private Task addFloppyDrive(String floppyImagePath, String newFloppyImagePath, String hostDevice, boolean startConnected) throws InvalidName, VmConfigFault, DuplicateName, TaskInProgress, FileFault, InvalidState, ConcurrentAccess, InvalidDatastore, InsufficientResourcesFault, RuntimeFault, RemoteException {
// Any VM associated with the device must be powered off.
if (vm.getRuntime().getPowerState() == VirtualMachinePowerState.poweredOff) {
throw new RuntimeException("Invalid power state: power off this VM before adding a floppy drive.");
}
VirtualFloppy floppy = new VirtualFloppy();
floppy.connectable = new VirtualDeviceConnectInfo();
floppy.connectable.startConnected = startConnected;
if (hostDevice != null) {
VirtualFloppyDeviceBackingInfo backing = new VirtualFloppyDeviceBackingInfo();
backing.deviceName = hostDevice;
floppy.backing = backing;
}
else if (floppyImagePath != null) {
VirtualFloppyImageBackingInfo backing = new VirtualFloppyImageBackingInfo();
backing.fileName = floppyImagePath;
floppy.backing = backing;
}
else if (newFloppyImagePath != null) {
VirtualFloppyImageBackingInfo backing = new VirtualFloppyImageBackingInfo();
backing.fileName = newFloppyImagePath;
floppy.backing = backing;
}
else {
// The VIM API doesn't allow for the possibility of adding a drive
// without hooking it up to something. In an ideal world, I'd probably
// want an ISO backing without having to specify a valid ISO at this
// time. So we'll create a remote passthrough backing and just set it
// as not connected.
VirtualFloppyRemoteDeviceBackingInfo backing = new VirtualFloppyRemoteDeviceBackingInfo();
backing.deviceName = "";
floppy.backing = backing;
floppy.connectable.startConnected = false;
floppy.connectable.connected = false;
}
floppy.key = -1;
VirtualDeviceConfigSpec floppySpec = new VirtualDeviceConfigSpec();
floppySpec.operation = VirtualDeviceConfigSpecOperation.add;
if (newFloppyImagePath != null) {
floppySpec.fileOperation = VirtualDeviceConfigSpecFileOperation.create;
}
floppySpec.device = floppy;
VirtualMachineConfigSpec config = new VirtualMachineConfigSpec();
config.deviceChange = new VirtualDeviceConfigSpec[]{floppySpec};
VirtualIDEController controller = getFirstAvailableController(VirtualIDEController.class);
if (controller != null) {
config.deviceChange[0].device.controllerKey = controller.key;
}
else {
throw new RuntimeException("No available IDE controller for floppy drive.");
}
return vm.reconfigVM_Task(config);
}