summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/modules/qemu/data/opt/openslx/vmchooser/plugins/qemukvm/run-virt.include1
-rw-r--r--core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/cmdln/CommandLineArgs.java8
-rw-r--r--core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskStorageDevices.java18
-rw-r--r--core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskStorageDevicesTest.java1
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() );
}