diff options
4 files changed, 19 insertions, 9 deletions
diff --git a/core/modules/qemu/data/opt/openslx/vmchooser/plugins/qemukvm/run-virt.include b/core/modules/qemu/data/opt/openslx/vmchooser/plugins/qemukvm/run-virt.include index ae14597c..6e16b498 100644 --- a/core/modules/qemu/data/opt/openslx/vmchooser/plugins/qemukvm/run-virt.include +++ b/core/modules/qemu/data/opt/openslx/vmchooser/plugins/qemukvm/run-virt.include @@ -119,6 +119,7 @@ run_plugin() { notempty PARALLEL0 && [ -w "${PARALLEL0}" ] \ && VIRTCMDOPTS+=( "-vmparallel0" "${PARALLEL0}" ) notempty pt_gpu_mdev_id && VIRTCMDOPTS+=( "-vmilmdevid0" "${pt_gpu_mdev_id}" ) + notempty VM_DISKFILE_RW && VIRTCMDOPTS+=( "-persistent" ) if $DEBUG; then VIRTCMDOPTS+=( "-xmledit" ) diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/cmdln/CommandLineArgs.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/cmdln/CommandLineArgs.java index 136640cb..b0e25de6 100644 --- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/cmdln/CommandLineArgs.java +++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/cmdln/CommandLineArgs.java @@ -184,6 +184,11 @@ public class CommandLineArgs { return this.cmdLn.hasOption( CmdLnOption.VALIDATE.getShortOption() ); } + + public boolean isPersistentModeEnabled() + { + return this.cmdLn.hasOption( CmdLnOption.PERSISTENT.getShortOption() ); + } /** * Returns the state of the command line option {@link CmdLnOption#DEBUG_PTH}. @@ -482,7 +487,7 @@ public class CommandLineArgs return retval; } - + /** * Returns the state whether a passthrough of a NVIDIA GPU is requested. * Do this by checking the vendor ID of each PCI device that's being passed @@ -558,6 +563,7 @@ public class CommandLineArgs MANAGER ( '2', "manager", 0, "Force using virt-manager even if not in debug mode" ), VALIDATE ( '3', "validate", 0, "Validate input file only, exit immediately with exit code 0 on success, 42 otherwise" ), USBREDIR ( '4', "usbredir", 1, "Add USB auto-redirect option to virt-viewer call. Can be passed multiple times." ), + PERSISTENT ( '5', "persistent", 0, "VM is running in persistent mode, don't sacrifice safety for speed" ), VM_MAC0 ( 'a', "vmmac0", 1, "MAC address for the first network interface" ), DEBUG ( 'b', "debug", 1, "Enable or disable debug mode" ), VM_NCPUS ( 'c', "vmncpus", 1, "Number of virtual CPUs for the virtual machine" ), diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskStorageDevices.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskStorageDevices.java index cf93eb66..957f0b43 100644 --- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskStorageDevices.java +++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskStorageDevices.java @@ -5,7 +5,6 @@ import java.util.ArrayList; import org.openslx.libvirt.domain.Domain; import org.openslx.libvirt.domain.device.Disk.BusType; import org.openslx.libvirt.domain.device.Disk.StorageType; -import org.openslx.libvirt.domain.device.DiskFloppy; import org.openslx.libvirt.domain.device.DiskStorage; import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgs; import org.openslx.virtualization.configuration.VirtualizationConfigurationQemuUtils; @@ -58,20 +57,20 @@ public class TransformationGenericDiskStorageDevices extends TransformationGener * selected. * @throws TransformationException transformation has failed. */ - private void transformDiskStorageDevice( Domain config, String fileName, int index ) throws TransformationException + private void transformDiskStorageDevice( Domain config, String fileName, int index, boolean safe ) throws TransformationException { final ArrayList<DiskStorage> devices = config.getDiskStorageDevices(); - final DiskStorage disk = VirtualizationConfigurationQemuUtils.getArrayIndex( devices, index ); + DiskStorage disk = VirtualizationConfigurationQemuUtils.getArrayIndex( devices, index ); if ( disk == null ) { if ( fileName != null && !fileName.isEmpty() ) { // storage device does not exist, so create new storage device final BusType devBusType = BusType.VIRTIO; final String targetDevName = VirtualizationConfigurationQemuUtils.createDeviceName( config, devBusType ); - final DiskFloppy newDisk = config.addDiskFloppyDevice(); - newDisk.setBusType( devBusType ); - newDisk.setTargetDevice( targetDevName ); - newDisk.setStorage( StorageType.FILE, fileName ); + disk = config.addDiskStorageDevice(); + disk.setBusType( devBusType ); + disk.setTargetDevice( targetDevName ); + disk.setStorage( StorageType.FILE, fileName ); } } else { // storage device exists, so update existing storage device @@ -83,6 +82,9 @@ public class TransformationGenericDiskStorageDevices extends TransformationGener disk.setStorage( StorageType.FILE, fileName ); } } + if ( !safe ) { + disk.setDriverCacheMode( "unsafe" ); + } } @Override @@ -92,7 +94,7 @@ public class TransformationGenericDiskStorageDevices extends TransformationGener this.validateInputs( config, args ); // alter storage device - this.transformDiskStorageDevice( config, args.getVmDiskFileNameHDD0(), 0 ); + this.transformDiskStorageDevice( config, args.getVmDiskFileNameHDD0(), 0, args.isPersistentModeEnabled() ); // remove all additional disk storage devices final ArrayList<DiskStorage> devices = config.getDiskStorageDevices(); diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskStorageDevicesTest.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskStorageDevicesTest.java index 8b52b90b..33140520 100644 --- a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskStorageDevicesTest.java +++ b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskStorageDevicesTest.java @@ -37,6 +37,7 @@ public class TransformationGenericDiskStorageDevicesTest final DiskStorage diskDeviceAfterTransformation = devicesAfterTransformation.get( 0 ); assertEquals( StorageType.FILE, diskDeviceAfterTransformation.getStorageType() ); assertEquals( TransformationTestUtils.DEFAULT_VM_HDD0, diskDeviceAfterTransformation.getStorageSource() ); + assertEquals( "unsafe", diskDeviceAfterTransformation.getDriverCacheMode() ); assertDoesNotThrow( () -> config.validateXml() ); } |
