in src/com/vmware/vim25/mox/VirtualMachineDeviceManager.java [154:223]
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);
}