summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManuel Bentele2021-05-14 14:39:33 +0200
committerManuel Bentele2021-05-14 14:39:33 +0200
commit4ee74c1bdcd21ad6f0152c5806a3eca0f0700b69 (patch)
tree966ad53135c02ee4f27429cec96e7026750f80e3
parent[qemu] Rename VmMetaData classes (diff)
downloadmltk-4ee74c1bdcd21ad6f0152c5806a3eca0f0700b69.tar.gz
mltk-4ee74c1bdcd21ad6f0152c5806a3eca0f0700b69.tar.xz
mltk-4ee74c1bdcd21ad6f0152c5806a3eca0f0700b69.zip
[qemu] Document configuration transformations and Libvirt QEMU hypervisor
-rw-r--r--core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/App.java4
-rw-r--r--core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/cmdln/CommandLineArgs.java10
-rw-r--r--core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericCpu.java35
-rw-r--r--core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskCdromDevices.java49
-rw-r--r--core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskFloppyDevices.java48
-rw-r--r--core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskStorageDevices.java49
-rw-r--r--core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericFileSystemDevices.java53
-rw-r--r--core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericInterfaceDevices.java48
-rw-r--r--core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericMemory.java35
-rw-r--r--core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericName.java38
-rw-r--r--core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericParallelDevices.java47
-rw-r--r--core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericUuid.java35
-rw-r--r--core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuArchitecture.java79
-rw-r--r--core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuGpuPassthroughNvidia.java59
-rw-r--r--core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuNvidiaGpuPassthrough.java26
-rw-r--r--core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuSerialDevices.java58
-rw-r--r--core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/virtualization/LibvirtHypervisorQemu.java38
-rw-r--r--core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtHypervisor.java76
-rw-r--r--core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtHypervisorException.java11
-rw-r--r--core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtVirtualMachine.java50
-rw-r--r--core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtVirtualMachineException.java11
21 files changed, 773 insertions, 86 deletions
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/App.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/App.java
index 4e872ffc..b026a540 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/App.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/App.java
@@ -24,7 +24,7 @@ import org.openslx.runvirt.plugin.qemu.configuration.TransformationGenericParall
import org.openslx.runvirt.plugin.qemu.configuration.TransformationSpecificQemuSerialDevices;
import org.openslx.runvirt.plugin.qemu.configuration.TransformationGenericUuid;
import org.openslx.runvirt.plugin.qemu.configuration.TransformationSpecificQemuArchitecture;
-import org.openslx.runvirt.plugin.qemu.configuration.TransformationSpecificQemuNvidiaGpuPassthrough;
+import org.openslx.runvirt.plugin.qemu.configuration.TransformationSpecificQemuGpuPassthroughNvidia;
import org.openslx.runvirt.plugin.qemu.virtualization.LibvirtHypervisorQemu;
import org.openslx.runvirt.plugin.qemu.virtualization.LibvirtHypervisorQemu.QemuSessionType;
import org.openslx.runvirt.virtualization.LibvirtHypervisor;
@@ -135,7 +135,7 @@ public class App
transformationManager.register( new TransformationSpecificQemuArchitecture( hypervisorQemu ), true );
transformationManager.register( new TransformationSpecificQemuSerialDevices( hypervisorQemu ), true );
- transformationManager.register( new TransformationSpecificQemuNvidiaGpuPassthrough( hypervisorQemu ), false );
+ transformationManager.register( new TransformationSpecificQemuGpuPassthroughNvidia( hypervisorQemu ), false );
}
// finalize Libvirt VM configuration template
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 7e1a7a22..03df8923 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
@@ -194,8 +194,14 @@ public class CommandLineArgs
*/
public int getVmNumCpus()
{
- final String numCpus = this.getArgument( CmdLnOption.VM_NCPUS );
- return Integer.parseInt( numCpus );
+ final String numCpuArg = this.getArgument( CmdLnOption.VM_NCPUS );
+ int numCpus = 0;
+
+ if ( numCpuArg != null ) {
+ numCpus = Integer.parseInt( numCpuArg );
+ }
+
+ return numCpus;
}
/**
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericCpu.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericCpu.java
index cdb0a63d..9d9237c7 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericCpu.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericCpu.java
@@ -7,18 +7,49 @@ import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgs;
import org.openslx.virtualization.configuration.transformation.TransformationException;
import org.openslx.virtualization.configuration.transformation.TransformationGeneric;
+/**
+ * Generic CPU transformation for Libvirt/QEMU virtualization configurations.
+ *
+ * @author Manuel Bentele
+ * @version 1.0
+ */
public class TransformationGenericCpu extends TransformationGeneric<Domain, CommandLineArgs>
{
- private static final String FILTER_NAME = "CPU [number of cores, mode, ...]";
+ /**
+ * Name of the configuration transformation.
+ */
+ private static final String NAME = "CPU [number of cores, mode, ...]";
+ /**
+ * Creates a new generic CPU transformation for Libvirt/QEMU virtualization configurations.
+ */
public TransformationGenericCpu()
{
- super( TransformationGenericCpu.FILTER_NAME );
+ super( TransformationGenericCpu.NAME );
+ }
+
+ /**
+ * Validates a virtualization configuration and input arguments for this transformation.
+ *
+ * @param config virtualization configuration for the validation.
+ * @param args input arguments for the validation.
+ * @throws TransformationException validation has failed.
+ */
+ private void validateInputs( Domain config, CommandLineArgs args ) throws TransformationException
+ {
+ if ( config == null || args == null ) {
+ throw new TransformationException( "Virtualization configuration or input arguments are missing!" );
+ } else if ( args.getVmNumCpus() < 1 ) {
+ throw new TransformationException( "Invalid number of CPUs specified! Expected a number n > 0!" );
+ }
}
@Override
public void transform( Domain config, CommandLineArgs args ) throws TransformationException
{
+ // validate configuration and input arguments
+ this.validateInputs( config, args );
+
config.setVCpu( args.getVmNumCpus() );
config.setCpuMode( CpuMode.HOST_PASSTHROUGH );
config.setCpuCheck( CpuCheck.PARTIAL );
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskCdromDevices.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskCdromDevices.java
index 345dd5a9..066af763 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskCdromDevices.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskCdromDevices.java
@@ -11,16 +11,51 @@ import org.openslx.virtualization.configuration.VirtualizationConfigurationQemuU
import org.openslx.virtualization.configuration.transformation.TransformationException;
import org.openslx.virtualization.configuration.transformation.TransformationGeneric;
+/**
+ * Generic CDROM drive transformation for Libvirt/QEMU virtualization configurations.
+ *
+ * @author Manuel Bentele
+ * @version 1.0
+ */
public class TransformationGenericDiskCdromDevices extends TransformationGeneric<Domain, CommandLineArgs>
{
- private static final String FILTER_NAME = "Disk CDROM devices";
+ /**
+ * Name of the configuration transformation.
+ */
+ private static final String NAME = "Disk CDROM devices";
+ /**
+ * Creates a new generic CDROM drive transformation for Libvirt/QEMU virtualization
+ * configurations.
+ */
public TransformationGenericDiskCdromDevices()
{
- super( TransformationGenericDiskCdromDevices.FILTER_NAME );
+ super( TransformationGenericDiskCdromDevices.NAME );
}
- private void filterDiskCdromDevice( Domain config, String fileName, int index ) throws TransformationException
+ /**
+ * Validates a virtualization configuration and input arguments for this transformation.
+ *
+ * @param config virtualization configuration for the validation.
+ * @param args input arguments for the validation.
+ * @throws TransformationException validation has failed.
+ */
+ private void validateInputs( Domain config, CommandLineArgs args ) throws TransformationException
+ {
+ if ( config == null || args == null ) {
+ throw new TransformationException( "Virtualization configuration or input arguments are missing!" );
+ }
+ }
+
+ /**
+ * Transforms a CDROM drive in a virtualization configuration selected by its {@code index}.
+ *
+ * @param config virtualization configuration for the transformation.
+ * @param fileName name of the image file for the CDROM drive.
+ * @param index number of the CDROM drive in the virtualization configuration that is selected.
+ * @throws TransformationException transformation has failed.
+ */
+ private void transformDiskCdromDevice( Domain config, String fileName, int index ) throws TransformationException
{
final ArrayList<DiskCdrom> devices = config.getDiskCdromDevices();
final DiskCdrom disk = VirtualizationConfigurationQemuUtils.getArrayIndex( devices, index );
@@ -42,8 +77,12 @@ public class TransformationGenericDiskCdromDevices extends TransformationGeneric
@Override
public void transform( Domain config, CommandLineArgs args ) throws TransformationException
{
- this.filterDiskCdromDevice( config, args.getVmDiskFileNameCdrom0(), 0 );
- this.filterDiskCdromDevice( config, args.getVmDiskFileNameCdrom1(), 1 );
+ // validate configuration and input arguments
+ this.validateInputs( config, args );
+
+ // alter CDROM drives
+ this.transformDiskCdromDevice( config, args.getVmDiskFileNameCdrom0(), 0 );
+ this.transformDiskCdromDevice( config, args.getVmDiskFileNameCdrom1(), 1 );
// remove all additional disk CDROM devices
final ArrayList<DiskCdrom> devices = config.getDiskCdromDevices();
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskFloppyDevices.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskFloppyDevices.java
index 6ceae846..87b0eb5c 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskFloppyDevices.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskFloppyDevices.java
@@ -10,16 +10,50 @@ import org.openslx.virtualization.configuration.VirtualizationConfigurationQemuU
import org.openslx.virtualization.configuration.transformation.TransformationException;
import org.openslx.virtualization.configuration.transformation.TransformationGeneric;
+/**
+ * Generic floppy drive transformation for Libvirt/QEMU virtualization configurations.
+ *
+ * @author Manuel Bentele
+ * @version 1.0
+ */
public class TransformationGenericDiskFloppyDevices extends TransformationGeneric<Domain, CommandLineArgs>
{
- private static final String FILTER_NAME = "Disk floppy devices";
+ /**
+ * Name of the configuration transformation.
+ */
+ private static final String NAME = "Disk floppy devices";
+ /**
+ * Creates a new floppy drive transformation for Libvirt/QEMU virtualization configurations.
+ */
public TransformationGenericDiskFloppyDevices()
{
- super( TransformationGenericDiskFloppyDevices.FILTER_NAME );
+ super( TransformationGenericDiskFloppyDevices.NAME );
}
- private void filterDiskFloppyDevice( Domain config, String fileName, int index ) throws TransformationException
+ /**
+ * Validates a virtualization configuration and input arguments for this transformation.
+ *
+ * @param config virtualization configuration for the validation.
+ * @param args input arguments for the validation.
+ * @throws TransformationException validation has failed.
+ */
+ private void validateInputs( Domain config, CommandLineArgs args ) throws TransformationException
+ {
+ if ( config == null || args == null ) {
+ throw new TransformationException( "Virtualization configuration or input arguments are missing!" );
+ }
+ }
+
+ /**
+ * Transforms a floppy drive in a virtualization configuration selected by its {@code index}.
+ *
+ * @param config virtualization configuration for the transformation.
+ * @param fileName name of the image file for the floppy drive.
+ * @param index number of the floppy drive in the virtualization configuration that is selected.
+ * @throws TransformationException transformation has failed.
+ */
+ private void transformDiskFloppyDevice( Domain config, String fileName, int index ) throws TransformationException
{
final ArrayList<DiskFloppy> devices = config.getDiskFloppyDevices();
final DiskFloppy disk = VirtualizationConfigurationQemuUtils.getArrayIndex( devices, index );
@@ -38,8 +72,12 @@ public class TransformationGenericDiskFloppyDevices extends TransformationGeneri
@Override
public void transform( Domain config, CommandLineArgs args ) throws TransformationException
{
- this.filterDiskFloppyDevice( config, args.getVmDiskFileNameFloppy0(), 0 );
- this.filterDiskFloppyDevice( config, args.getVmDiskFileNameFloppy1(), 1 );
+ // validate configuration and input arguments
+ this.validateInputs( config, args );
+
+ // alter floppy drives
+ this.transformDiskFloppyDevice( config, args.getVmDiskFileNameFloppy0(), 0 );
+ this.transformDiskFloppyDevice( config, args.getVmDiskFileNameFloppy1(), 1 );
// remove all additional disk storage devices
final ArrayList<DiskFloppy> devices = config.getDiskFloppyDevices();
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 ca71f7a3..30c26cae 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
@@ -10,16 +10,53 @@ import org.openslx.virtualization.configuration.VirtualizationConfigurationQemuU
import org.openslx.virtualization.configuration.transformation.TransformationException;
import org.openslx.virtualization.configuration.transformation.TransformationGeneric;
+/**
+ * Generic storage device (HDD, SSD, ...) transformation for Libvirt/QEMU virtualization
+ * configurations.
+ *
+ * @author Manuel Bentele
+ * @version 1.0
+ */
public class TransformationGenericDiskStorageDevices extends TransformationGeneric<Domain, CommandLineArgs>
{
- private static final String FILTER_NAME = "Disk storage devices [HDD, SSD, ...]";
+ /**
+ * Name of the configuration transformation.
+ */
+ private static final String NAME = "Disk storage devices [HDD, SSD, ...]";
+ /**
+ * Creates a new storage device (HDD, SSD, ...) transformation for Libvirt/QEMU virtualization
+ * configurations.
+ */
public TransformationGenericDiskStorageDevices()
{
- super( TransformationGenericDiskStorageDevices.FILTER_NAME );
+ super( TransformationGenericDiskStorageDevices.NAME );
}
- private void filterDiskStorageDevice( Domain config, String fileName, int index ) throws TransformationException
+ /**
+ * Validates a virtualization configuration and input arguments for this transformation.
+ *
+ * @param config virtualization configuration for the validation.
+ * @param args input arguments for the validation.
+ * @throws TransformationException validation has failed.
+ */
+ private void validateInputs( Domain config, CommandLineArgs args ) throws TransformationException
+ {
+ if ( config == null || args == null ) {
+ throw new TransformationException( "Virtualization configuration or input arguments are missing!" );
+ }
+ }
+
+ /**
+ * Transforms a storage device in a virtualization configuration selected by its {@code index}.
+ *
+ * @param config virtualization configuration for the transformation.
+ * @param fileName name of the image file for the storage device.
+ * @param index number of the storage device in the virtualization configuration that is
+ * selected.
+ * @throws TransformationException transformation has failed.
+ */
+ private void transformDiskStorageDevice( Domain config, String fileName, int index ) throws TransformationException
{
final ArrayList<DiskStorage> devices = config.getDiskStorageDevices();
final DiskStorage disk = VirtualizationConfigurationQemuUtils.getArrayIndex( devices, index );
@@ -38,7 +75,11 @@ public class TransformationGenericDiskStorageDevices extends TransformationGener
@Override
public void transform( Domain config, CommandLineArgs args ) throws TransformationException
{
- this.filterDiskStorageDevice( config, args.getVmDiskFileNameHDD0(), 0 );
+ // validate configuration and input arguments
+ this.validateInputs( config, args );
+
+ // alter storage device
+ this.transformDiskStorageDevice( config, args.getVmDiskFileNameHDD0(), 0 );
// remove all additional disk storage devices
final ArrayList<DiskStorage> devices = config.getDiskStorageDevices();
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericFileSystemDevices.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericFileSystemDevices.java
index 0417bfdf..88939302 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericFileSystemDevices.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericFileSystemDevices.java
@@ -11,16 +11,55 @@ import org.openslx.virtualization.configuration.VirtualizationConfigurationQemuU
import org.openslx.virtualization.configuration.transformation.TransformationException;
import org.openslx.virtualization.configuration.transformation.TransformationGeneric;
+/**
+ * Generic file system device (shared folder) transformation for Libvirt/QEMU virtualization
+ * configurations.
+ *
+ * @author Manuel Bentele
+ * @version 1.0
+ */
public class TransformationGenericFileSystemDevices extends TransformationGeneric<Domain, CommandLineArgs>
{
- private static final String FILTER_NAME = "File system devices";
+ /**
+ * Name of the configuration transformation.
+ */
+ private static final String NAME = "File system devices";
+ /**
+ * Creates a new file system device (shared folder) transformation for Libvirt/QEMU
+ * virtualization configurations.
+ */
public TransformationGenericFileSystemDevices()
{
- super( TransformationGenericFileSystemDevices.FILTER_NAME );
+ super( TransformationGenericFileSystemDevices.NAME );
}
- private void filterFileSystemDevice( Domain config, String source, String target, int index ) throws TransformationException
+ /**
+ * Validates a virtualization configuration and input arguments for this transformation.
+ *
+ * @param config virtualization configuration for the validation.
+ * @param args input arguments for the validation.
+ * @throws TransformationException validation has failed.
+ */
+ private void validateInputs( Domain config, CommandLineArgs args ) throws TransformationException
+ {
+ if ( config == null || args == null ) {
+ throw new TransformationException( "Virtualization configuration or input arguments are missing!" );
+ }
+ }
+
+ /**
+ * Transforms a storage device in a virtualization configuration selected by its {@code index}.
+ *
+ * @param config virtualization configuration for the transformation.
+ * @param source path of the file system source on a host system.
+ * @param target path of the file system destination in a virtualization guest.
+ * @param index number of the file system device in the virtualization configuration that is
+ * selected.
+ * @throws TransformationException transformation has failed.
+ */
+ private void transformFileSystemDevice( Domain config, String source, String target, int index )
+ throws TransformationException
{
final ArrayList<FileSystem> devices = config.getFileSystemDevices();
final FileSystem fileSystem = VirtualizationConfigurationQemuUtils.getArrayIndex( devices, index );
@@ -52,8 +91,12 @@ public class TransformationGenericFileSystemDevices extends TransformationGeneri
@Override
public void transform( Domain config, CommandLineArgs args ) throws TransformationException
{
- this.filterFileSystemDevice( config, args.getVmFsSrc0(), args.getVmFsTgt0(), 0 );
- this.filterFileSystemDevice( config, args.getVmFsSrc1(), args.getVmFsTgt1(), 1 );
+ // validate configuration and input arguments
+ this.validateInputs( config, args );
+
+ // alter file system devices
+ this.transformFileSystemDevice( config, args.getVmFsSrc0(), args.getVmFsTgt0(), 0 );
+ this.transformFileSystemDevice( config, args.getVmFsSrc1(), args.getVmFsTgt1(), 1 );
// remove all additional file system devices
final ArrayList<FileSystem> devices = config.getFileSystemDevices();
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericInterfaceDevices.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericInterfaceDevices.java
index 3b45de78..ab44b784 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericInterfaceDevices.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericInterfaceDevices.java
@@ -9,16 +9,52 @@ import org.openslx.virtualization.configuration.VirtualizationConfigurationQemuU
import org.openslx.virtualization.configuration.transformation.TransformationException;
import org.openslx.virtualization.configuration.transformation.TransformationGeneric;
+/**
+ * Generic network interface transformation for Libvirt/QEMU virtualization configurations.
+ *
+ * @author Manuel Bentele
+ * @version 1.0
+ */
public class TransformationGenericInterfaceDevices extends TransformationGeneric<Domain, CommandLineArgs>
{
- private static final String FILTER_NAME = "Network interface devices";
+ /**
+ * Name of the configuration transformation.
+ */
+ private static final String NAME = "Network interface devices";
+ /**
+ * Creates a new network interface transformation for Libvirt/QEMU virtualization configurations.
+ */
public TransformationGenericInterfaceDevices()
{
- super( TransformationGenericInterfaceDevices.FILTER_NAME );
+ super( TransformationGenericInterfaceDevices.NAME );
}
- private void filterInterfaceDevice( Domain config, String macAddress, int index ) throws TransformationException
+ /**
+ * Validates a virtualization configuration and input arguments for this transformation.
+ *
+ * @param config virtualization configuration for the validation.
+ * @param args input arguments for the validation.
+ * @throws TransformationException validation has failed.
+ */
+ private void validateInputs( Domain config, CommandLineArgs args ) throws TransformationException
+ {
+ if ( config == null || args == null ) {
+ throw new TransformationException( "Virtualization configuration or input arguments are missing!" );
+ }
+ }
+
+ /**
+ * Transforms a network interface in a virtualization configuration selected by its
+ * {@code index}.
+ *
+ * @param config virtualization configuration for the transformation.
+ * @param macAddress MAC address for the network interface.
+ * @param index number of the network interface in the virtualization configuration that is
+ * selected.
+ * @throws TransformationException transformation has failed.
+ */
+ private void transformInterfaceDevice( Domain config, String macAddress, int index ) throws TransformationException
{
final ArrayList<Interface> devices = config.getInterfaceDevices();
final Interface device = VirtualizationConfigurationQemuUtils.getArrayIndex( devices, index );
@@ -37,7 +73,11 @@ public class TransformationGenericInterfaceDevices extends TransformationGeneric
@Override
public void transform( Domain config, CommandLineArgs args ) throws TransformationException
{
- this.filterInterfaceDevice( config, args.getVmMacAddress0(), 0 );
+ // validate configuration and input arguments
+ this.validateInputs( config, args );
+
+ // alter network interface
+ this.transformInterfaceDevice( config, args.getVmMacAddress0(), 0 );
// remove all additional disk storage devices
final ArrayList<Interface> devices = config.getInterfaceDevices();
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericMemory.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericMemory.java
index 341a5b7f..fce373f7 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericMemory.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericMemory.java
@@ -8,18 +8,49 @@ import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgs;
import org.openslx.virtualization.configuration.transformation.TransformationException;
import org.openslx.virtualization.configuration.transformation.TransformationGeneric;
+/**
+ * Generic memory transformation for Libvirt/QEMU virtualization configurations.
+ *
+ * @author Manuel Bentele
+ * @version 1.0
+ */
public class TransformationGenericMemory extends TransformationGeneric<Domain, CommandLineArgs>
{
- private static final String FILTER_NAME = "Memory [normal, current (balloning)]";
+ /**
+ * Name of the configuration transformation.
+ */
+ private static final String NAME = "Memory [normal, current (balloning)]";
+ /**
+ * Creates a new memory transformation for Libvirt/QEMU virtualization configurations.
+ */
public TransformationGenericMemory()
{
- super( TransformationGenericMemory.FILTER_NAME );
+ super( TransformationGenericMemory.NAME );
+ }
+
+ /**
+ * Validates a virtualization configuration and input arguments for this transformation.
+ *
+ * @param config virtualization configuration for the validation.
+ * @param args input arguments for the validation.
+ * @throws TransformationException validation has failed.
+ */
+ private void validateInputs( Domain config, CommandLineArgs args ) throws TransformationException
+ {
+ if ( config == null || args == null ) {
+ throw new TransformationException( "Virtualization configuration or input arguments are missing!" );
+ } else if ( args.getVmMemory() == null || args.getVmMemory().isEmpty() ) {
+ throw new TransformationException( "Amount of memory in MiB is not specified!" );
+ }
}
@Override
public void transform( Domain config, CommandLineArgs args ) throws TransformationException
{
+ // validate configuration and input arguments
+ this.validateInputs( config, args );
+
BigInteger memory = DomainUtils.decodeMemory( args.getVmMemory(), "MiB" );
config.setMemory( memory );
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericName.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericName.java
index 3cc2572d..b96793d5 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericName.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericName.java
@@ -5,18 +5,52 @@ import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgs;
import org.openslx.virtualization.configuration.transformation.TransformationException;
import org.openslx.virtualization.configuration.transformation.TransformationGeneric;
+/**
+ * Generic name transformation for Libvirt/QEMU virtualization configurations.
+ *
+ * @author Manuel Bentele
+ * @version 1.0
+ */
public class TransformationGenericName extends TransformationGeneric<Domain, CommandLineArgs>
{
- private static final String FILTER_NAME = "Name [(display) name]";
+ /**
+ * Name of the configuration transformation.
+ */
+ private static final String NAME = "Name [(display) name]";
+ /**
+ * Creates a new name transformation for Libvirt/QEMU virtualization configurations.
+ */
public TransformationGenericName()
{
- super( TransformationGenericName.FILTER_NAME );
+ super( TransformationGenericName.NAME );
+ }
+
+ /**
+ * Validates a virtualization configuration and input arguments for this transformation.
+ *
+ * @param config virtualization configuration for the validation.
+ * @param args input arguments for the validation.
+ * @throws TransformationException validation has failed.
+ */
+ private void validateInputs( Domain config, CommandLineArgs args ) throws TransformationException
+ {
+ if ( config == null || args == null ) {
+ throw new TransformationException( "Virtualization configuration or input arguments are missing!" );
+ } else if ( args.getVmName() == null || args.getVmName().isEmpty() ) {
+ throw new TransformationException( "Name is not specified!" );
+ } else if ( args.getVmDisplayName() == null || args.getVmDisplayName().isEmpty() ) {
+ throw new TransformationException( "Display name is not specified!" );
+ }
}
@Override
public void transform( Domain config, CommandLineArgs args ) throws TransformationException
{
+ // validate configuration and input arguments
+ this.validateInputs( config, args );
+
+ // alter names in the configuration
config.setName( args.getVmName() );
config.setTitle( args.getVmDisplayName() );
}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericParallelDevices.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericParallelDevices.java
index 7350df32..dff86132 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericParallelDevices.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericParallelDevices.java
@@ -10,16 +10,51 @@ import org.openslx.virtualization.configuration.VirtualizationConfigurationQemuU
import org.openslx.virtualization.configuration.transformation.TransformationException;
import org.openslx.virtualization.configuration.transformation.TransformationGeneric;
+/**
+ * Generic parallel device transformation for Libvirt/QEMU virtualization configurations.
+ *
+ * @author Manuel Bentele
+ * @version 1.0
+ */
public class TransformationGenericParallelDevices extends TransformationGeneric<Domain, CommandLineArgs>
{
- private static final String FILTER_NAME = "Parallel devices";
+ /**
+ * Name of the configuration transformation.
+ */
+ private static final String NAME = "Parallel devices";
+ /**
+ * Creates a new parallel device transformation for Libvirt/QEMU virtualization configurations.
+ */
public TransformationGenericParallelDevices()
{
- super( TransformationGenericParallelDevices.FILTER_NAME );
+ super( TransformationGenericParallelDevices.NAME );
}
- private void filterParallelDevice( Domain config, String fileName, int index ) throws TransformationException
+ /**
+ * Validates a virtualization configuration and input arguments for this transformation.
+ *
+ * @param config virtualization configuration for the validation.
+ * @param args input arguments for the validation.
+ * @throws TransformationException validation has failed.
+ */
+ private void validateInputs( Domain config, CommandLineArgs args ) throws TransformationException
+ {
+ if ( config == null || args == null ) {
+ throw new TransformationException( "Virtualization configuration or input arguments are missing!" );
+ }
+ }
+
+ /**
+ * Transforms a parallel device in a virtualization configuration selected by its {@code index}.
+ *
+ * @param config virtualization configuration for the transformation.
+ * @param fileName path to the parallel device file on the host system.
+ * @param index number of the parallel device in the virtualization configuration that is
+ * selected.
+ * @throws TransformationException transformation has failed.
+ */
+ private void transformParallelDevice( Domain config, String fileName, int index ) throws TransformationException
{
final ArrayList<Parallel> devices = config.getParallelDevices();
final Parallel device = VirtualizationConfigurationQemuUtils.getArrayIndex( devices, index );
@@ -47,7 +82,11 @@ public class TransformationGenericParallelDevices extends TransformationGeneric<
@Override
public void transform( Domain config, CommandLineArgs args ) throws TransformationException
{
- this.filterParallelDevice( config, args.getVmDeviceSerial0(), 0 );
+ // validate configuration and input arguments
+ this.validateInputs( config, args );
+
+ // alter parallel device
+ this.transformParallelDevice( config, args.getVmDeviceParallel0(), 0 );
// remove all additional parallel devices
final ArrayList<Parallel> devices = config.getParallelDevices();
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericUuid.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericUuid.java
index c60c794f..43fb6412 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericUuid.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericUuid.java
@@ -5,18 +5,49 @@ import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgs;
import org.openslx.virtualization.configuration.transformation.TransformationException;
import org.openslx.virtualization.configuration.transformation.TransformationGeneric;
+/**
+ * Generic UUID transformation for Libvirt/QEMU virtualization configurations.
+ *
+ * @author Manuel Bentele
+ * @version 1.0
+ */
public class TransformationGenericUuid extends TransformationGeneric<Domain, CommandLineArgs>
{
- private static final String FILTER_NAME = "UUID";
+ /**
+ * Name of the configuration transformation.
+ */
+ private static final String NAME = "UUID";
+ /**
+ * Creates a new UUID transformation for Libvirt/QEMU virtualization configurations.
+ */
public TransformationGenericUuid()
{
- super( TransformationGenericUuid.FILTER_NAME );
+ super( TransformationGenericUuid.NAME );
+ }
+
+ /**
+ * Validates a virtualization configuration and input arguments for this transformation.
+ *
+ * @param config virtualization configuration for the validation.
+ * @param args input arguments for the validation.
+ * @throws TransformationException validation has failed.
+ */
+ private void validateInputs( Domain config, CommandLineArgs args ) throws TransformationException
+ {
+ if ( config == null || args == null ) {
+ throw new TransformationException( "Virtualization configuration or input arguments are missing!" );
+ } else if ( args.getVmUuid() == null || args.getVmUuid().isEmpty() ) {
+ throw new TransformationException( "UUID is not specified!" );
+ }
}
@Override
public void transform( Domain config, CommandLineArgs args ) throws TransformationException
{
+ // validate configuration and input arguments
+ this.validateInputs( config, args );
+
config.setUuid( args.getVmUuid() );
}
}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuArchitecture.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuArchitecture.java
index bdded447..0c32a3b3 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuArchitecture.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuArchitecture.java
@@ -15,18 +15,59 @@ import org.openslx.runvirt.virtualization.LibvirtHypervisorException;
import org.openslx.virtualization.configuration.transformation.TransformationException;
import org.openslx.virtualization.configuration.transformation.TransformationSpecific;
-public class TransformationSpecificQemuArchitecture extends TransformationSpecific<Domain, CommandLineArgs, LibvirtHypervisorQemu>
+/**
+ * Specific architecture transformation for Libvirt/QEMU virtualization configurations.
+ *
+ * @author Manuel Bentele
+ * @version 1.0
+ */
+public class TransformationSpecificQemuArchitecture
+ extends TransformationSpecific<Domain, CommandLineArgs, LibvirtHypervisorQemu>
{
- private static final String FILTER_NAME = "QEMU Architecture [CPU architecture, machine type, ...]";
+ /**
+ * Name of the configuration transformation.
+ */
+ private static final String NAME = "QEMU Architecture [CPU architecture, machine type, ...]";
- // used as instance of an singelton, always use getCapabilities to retrieve caps instance
+ /**
+ * Capabilities of the Libvirt/QEMU hypervisor.
+ *
+ * @implNote This field is used as an instance of a singelton. Please always use
+ * {@link #getCapabilities()} to retrieve the {@code capabilities} instance.
+ */
private Capabilities capabilities = null;
+ /**
+ * Creates a new architecture transformation for Libvirt/QEMU virtualization configurations.
+ *
+ * @param hypervisor Libvirt/QEMU hypervisor.
+ */
public TransformationSpecificQemuArchitecture( LibvirtHypervisorQemu hypervisor )
{
- super( TransformationSpecificQemuArchitecture.FILTER_NAME, hypervisor );
+ super( TransformationSpecificQemuArchitecture.NAME, hypervisor );
}
+ /**
+ * Validates a virtualization configuration and input arguments for this transformation.
+ *
+ * @param config virtualization configuration for the validation.
+ * @param args input arguments for the validation.
+ * @throws TransformationException validation has failed.
+ */
+ private void validateInputs( Domain config, CommandLineArgs args ) throws TransformationException
+ {
+ if ( config == null ) {
+ throw new TransformationException( "Virtualization configuration is missing!" );
+ }
+ }
+
+ /**
+ * Queries and returns the capabilities of the Libvirt/QEMU hypervisor.
+ *
+ * @return capabilities of the Libvirt/QEMU hypervisor.
+ * @throws TransformationException failed to query and return the capabilities of the
+ * Libvirt/QEMU hypervisor.
+ */
private Capabilities getCapabilities() throws TransformationException
{
// retrieve capabilities from QEMU hypervisor only once
@@ -43,6 +84,14 @@ public class TransformationSpecificQemuArchitecture extends TransformationSpecif
return this.capabilities;
}
+ /**
+ * Returns a guest capability of the hypervisor's host system based on a given target
+ * architecture name.
+ *
+ * @param architectureName target architecture of the guest that is returned
+ * @return guest capability of the hypervisor's host system with target architecture name.
+ * @throws TransformationException failed to return guest capability of the hypervisor's host.
+ */
private Guest getTargetGuestFromArchName( String architectureName ) throws TransformationException
{
final List<Guest> guests = this.getCapabilities().getGuests();
@@ -63,6 +112,16 @@ public class TransformationSpecificQemuArchitecture extends TransformationSpecif
return targetGuest;
}
+ /**
+ * Returns the target machine description of a host system's guest capability based on a given
+ * target machine name.
+ *
+ * @param guest guest capability of a host system.
+ * @param machineName name of the machine description.
+ * @return target machine description of a host system's guest capability.
+ * @throws TransformationException failed to return the target machine description of a host
+ * system's guest capabilities.
+ */
private Machine getTargetMachineFromGuest( Guest guest, String machineName ) throws TransformationException
{
final List<Machine> machines = guest.getArchMachines();
@@ -82,6 +141,15 @@ public class TransformationSpecificQemuArchitecture extends TransformationSpecif
return targetMachine;
}
+ /**
+ * Returns the canonical names of a target machine description of a host system's guest
+ * capability.
+ *
+ * @param guest guest capability of a host system.
+ * @return canonical names of a target machine description of a host system's guest capability.
+ * @throws TransformationException failed to return the canonical names of a target machine
+ * description of a host system's guest capability
+ */
private List<String> getCanonicalNamesFromTargetMachines( Guest guest ) throws TransformationException
{
final List<Machine> machines = guest.getArchMachines();
@@ -100,6 +168,9 @@ public class TransformationSpecificQemuArchitecture extends TransformationSpecif
@Override
public void transform( Domain config, CommandLineArgs args ) throws TransformationException
{
+ // validate configuration and input arguments
+ this.validateInputs( config, args );
+
// get source architecture, machine- and OS type
final String sourceArchitectureName = config.getOsArch();
final String sourceMachine = config.getOsMachine();
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuGpuPassthroughNvidia.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuGpuPassthroughNvidia.java
new file mode 100644
index 00000000..c41f989c
--- /dev/null
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuGpuPassthroughNvidia.java
@@ -0,0 +1,59 @@
+package org.openslx.runvirt.plugin.qemu.configuration;
+
+import org.openslx.libvirt.domain.Domain;
+import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgs;
+import org.openslx.runvirt.plugin.qemu.virtualization.LibvirtHypervisorQemu;
+import org.openslx.virtualization.configuration.transformation.TransformationException;
+import org.openslx.virtualization.configuration.transformation.TransformationSpecific;
+
+/**
+ * Specific Nvidia GPU passthrough transformation for Libvirt/QEMU virtualization configurations.
+ *
+ * @author Manuel Bentele
+ * @version 1.0
+ */
+public class TransformationSpecificQemuGpuPassthroughNvidia
+ extends TransformationSpecific<Domain, CommandLineArgs, LibvirtHypervisorQemu>
+{
+ /**
+ * Name of the configuration transformation.
+ */
+ private static final String NAME = "QEMU GPU passthrough [Nvidia]";
+
+ /**
+ * Creates a new Nvidia GPU passthrough transformation for Libvirt/QEMU virtualization
+ * configurations.
+ *
+ * @param hypervisor Libvirt/QEMU hypervisor.
+ */
+ public TransformationSpecificQemuGpuPassthroughNvidia( LibvirtHypervisorQemu hypervisor )
+ {
+ super( TransformationSpecificQemuGpuPassthroughNvidia.NAME, hypervisor );
+ }
+
+ /**
+ * Validates a virtualization configuration and input arguments for this transformation.
+ *
+ * @param config virtualization configuration for the validation.
+ * @param args input arguments for the validation.
+ * @throws TransformationException validation has failed.
+ */
+ private void validateInputs( Domain config, CommandLineArgs args ) throws TransformationException
+ {
+ if ( config == null || args == null ) {
+ throw new TransformationException( "Virtualization configuration or input arguments are missing!" );
+ }
+ }
+
+ @Override
+ public void transform( Domain config, CommandLineArgs args ) throws TransformationException
+ {
+ // validate configuration and input arguments
+ this.validateInputs( config, args );
+
+ // check if IOMMU support is available on the host
+
+ // TODO: implement Nvidia hypervisor shadowing
+ // call this filter at the end, since -> override of software graphics to 'none' necessary
+ }
+}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuNvidiaGpuPassthrough.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuNvidiaGpuPassthrough.java
deleted file mode 100644
index 80349188..00000000
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuNvidiaGpuPassthrough.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package org.openslx.runvirt.plugin.qemu.configuration;
-
-import org.openslx.libvirt.domain.Domain;
-import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgs;
-import org.openslx.runvirt.plugin.qemu.virtualization.LibvirtHypervisorQemu;
-import org.openslx.virtualization.configuration.transformation.TransformationException;
-import org.openslx.virtualization.configuration.transformation.TransformationSpecific;
-
-public class TransformationSpecificQemuNvidiaGpuPassthrough extends TransformationSpecific<Domain, CommandLineArgs, LibvirtHypervisorQemu>
-{
- private static final String FILTER_NAME = "QEMU GPU passthrough [Nvidia]";
-
- public TransformationSpecificQemuNvidiaGpuPassthrough( LibvirtHypervisorQemu hypervisor )
- {
- super( TransformationSpecificQemuNvidiaGpuPassthrough.FILTER_NAME, hypervisor );
- }
-
- @Override
- public void transform( Domain config, CommandLineArgs args ) throws TransformationException
- {
- // check if IOMMU support is available on the host
-
- // TODO: implement Nvidia hypervisor shadowing
- // call this filter at the end, since -> override of software graphics to 'none' necessary
- }
-}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuSerialDevices.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuSerialDevices.java
index 5c4509d7..1cd3c9b0 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuSerialDevices.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuSerialDevices.java
@@ -13,15 +13,51 @@ import org.openslx.virtualization.configuration.VirtualizationConfigurationQemuU
import org.openslx.virtualization.configuration.transformation.TransformationException;
import org.openslx.virtualization.configuration.transformation.TransformationSpecific;
-public class TransformationSpecificQemuSerialDevices extends TransformationSpecific<Domain, CommandLineArgs, LibvirtHypervisorQemu>
+/**
+ * Specific serial device transformation for Libvirt/QEMU virtualization configurations.
+ *
+ * @author Manuel Bentele
+ * @version 1.0
+ */
+public class TransformationSpecificQemuSerialDevices
+ extends TransformationSpecific<Domain, CommandLineArgs, LibvirtHypervisorQemu>
{
- private static final String FILTER_NAME = "Serial devices";
+ /**
+ * Name of the configuration transformation.
+ */
+ private static final String NAME = "Serial devices";
+ /**
+ * Creates a new serial device transformation for Libvirt/QEMU virtualization configurations.
+ *
+ * @param hypervisor Libvirt/QEMU hypervisor.
+ */
public TransformationSpecificQemuSerialDevices( LibvirtHypervisorQemu hypervisor )
{
- super( TransformationSpecificQemuSerialDevices.FILTER_NAME, hypervisor );
+ super( TransformationSpecificQemuSerialDevices.NAME, hypervisor );
}
+ /**
+ * Validates a virtualization configuration and input arguments for this transformation.
+ *
+ * @param config virtualization configuration for the validation.
+ * @param args input arguments for the validation.
+ * @throws TransformationException validation has failed.
+ */
+ private void validateInputs( Domain config, CommandLineArgs args ) throws TransformationException
+ {
+ if ( config == null || args == null ) {
+ throw new TransformationException( "Virtualization configuration or input arguments are missing!" );
+ }
+ }
+
+ /**
+ * Returns all serial devices from a virtualization configuration that link to a host system's
+ * serial device.
+ *
+ * @param config virtualization configuration.
+ * @return all serial devices that link to a host system's serial device.
+ */
private ArrayList<Serial> getSerialDevDevices( Domain config )
{
final ArrayList<Serial> devices = config.getSerialDevices();
@@ -30,7 +66,15 @@ public class TransformationSpecificQemuSerialDevices extends TransformationSpeci
return devices.stream().filter( byDeviceTypeDev ).collect( Collectors.toCollection( ArrayList::new ) );
}
- private void filterSerialDevice( Domain config, String fileName, int index ) throws TransformationException
+ /**
+ * Transforms a serial device in a virtualization configuration selected by its {@code index}.
+ *
+ * @param config virtualization configuration for the transformation.
+ * @param fileName path to the serial device file on the host system.
+ * @param index number of the serial device in the virtualization configuration that is selected.
+ * @throws TransformationException transformation has failed.
+ */
+ private void transformSerialDevice( Domain config, String fileName, int index ) throws TransformationException
{
final ArrayList<Serial> devices = this.getSerialDevDevices( config );
final Serial device = VirtualizationConfigurationQemuUtils.getArrayIndex( devices, index );
@@ -58,7 +102,11 @@ public class TransformationSpecificQemuSerialDevices extends TransformationSpeci
@Override
public void transform( Domain config, CommandLineArgs args ) throws TransformationException
{
- this.filterSerialDevice( config, args.getVmDeviceSerial0(), 0 );
+ // validate configuration and input arguments
+ this.validateInputs( config, args );
+
+ // alter serial device
+ this.transformSerialDevice( config, args.getVmDeviceSerial0(), 0 );
// remove all additional serial devices
final ArrayList<Serial> devices = this.getSerialDevDevices( config );
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/virtualization/LibvirtHypervisorQemu.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/virtualization/LibvirtHypervisorQemu.java
index 260c3f4e..34cf33cf 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/virtualization/LibvirtHypervisorQemu.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/virtualization/LibvirtHypervisorQemu.java
@@ -3,13 +3,31 @@ package org.openslx.runvirt.plugin.qemu.virtualization;
import org.openslx.runvirt.virtualization.LibvirtHypervisor;
import org.openslx.runvirt.virtualization.LibvirtHypervisorException;
+/**
+ * Representation of the Libvirt QEMU hypervisor backend.
+ *
+ * @author Manuel Bentele
+ * @version 1.0
+ */
public class LibvirtHypervisorQemu extends LibvirtHypervisor
{
+ /**
+ * Creates a new Libvirt QEMU hypervisor backend and connects to the specified backend.
+ *
+ * @param type session type of the connection to the Libvirt QEMU hypervisor backend.
+ * @throws LibvirtHypervisorException failed to connect to the Libvirt QEMU hypervisor backend.
+ */
public LibvirtHypervisorQemu( QemuSessionType type ) throws LibvirtHypervisorException
{
super( type.getConnectionUri() );
}
+ /**
+ * Type of Libvirt QEMU hypervisor backend session.
+ *
+ * @author Manuel Bentele
+ * @version 1.0
+ */
public enum QemuSessionType
{
// @formatter:off
@@ -17,23 +35,29 @@ public class LibvirtHypervisorQemu extends LibvirtHypervisor
LOCAL_USER_SESSION ( "qemu:///session" );
// @formatter:on
+ /**
+ * Connection URI of the QEMU session type.
+ */
private final String connectionUri;
+ /**
+ * Creates a new QEMU session type.
+ *
+ * @param connectionUri URI for the connection of the session.
+ */
QemuSessionType( String connectionUri )
{
this.connectionUri = connectionUri;
}
+ /**
+ * Returns the URI of the connection for the session.
+ *
+ * @return URI of the connection for the session.
+ */
public String getConnectionUri()
{
return this.connectionUri;
}
-
- // TODO:
- // Implement capabilities -> get host architecture => decision whether to emulate or use KVM? -> change domain of XML
- // fill in given HDD file, CDROM, ...
- // GPU-Passthrough: patch XML with hypervisor disable bit, ..., to get Nvidia driver working
- // Add hostdev für GPU passthrough -> add PCI ID arguments to cmdln parser
- //
}
}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtHypervisor.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtHypervisor.java
index 345900ab..3c654880 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtHypervisor.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtHypervisor.java
@@ -8,16 +8,47 @@ import org.openslx.libvirt.capabilities.Capabilities;
import org.openslx.libvirt.xml.LibvirtXmlDocumentException;
import org.openslx.libvirt.xml.LibvirtXmlSerializationException;
import org.openslx.libvirt.xml.LibvirtXmlValidationException;
-
+import org.openslx.virtualization.Version;
+
+/**
+ * Representation of a Libvirt hypervisor backend (e.g. QEMU or VMware).
+ * <p>
+ * The representation allows to connect to a running Libvirt service and query the host system's
+ * capabilities or manage virtual machines.
+ *
+ * @implNote This class is the abstract representation to implement various Libvirt hypervisor
+ * backends using inheritance.
+ *
+ * @author Manuel Bentele
+ * @version 1.0
+ */
public abstract class LibvirtHypervisor implements Closeable
{
+ /**
+ * Connection to a Libvirt hypervisor backend.
+ */
protected Connect hypervisor = null;
+ /**
+ * Creates a new Libvirt hypervisor backend specified by an URI and connects to the specified
+ * backend.
+ *
+ * @param connectionUri URI of a specific Libvirt hypervisor backend.
+ * @throws LibvirtHypervisorException failed to connect to the specified Libvirt hypervisor
+ * backend.
+ */
public LibvirtHypervisor( String connectionUri ) throws LibvirtHypervisorException
{
this.connect( connectionUri );
}
+ /**
+ * Connects to the Libvirt hypervisor backend specified by an URI.
+ *
+ * @param connectionUri URI of a specific Libvirt hypervisor backend.
+ * @throws LibvirtHypervisorException failed to connect to the specified Libvirt hypervisor
+ * backend.
+ */
protected void connect( String connectionUri ) throws LibvirtHypervisorException
{
try {
@@ -27,6 +58,13 @@ public abstract class LibvirtHypervisor implements Closeable
}
}
+ /**
+ * Returns the queried Libvirt hypervisor's host system capabilities.
+ *
+ * @return queried Libvirt hypervisor's host system capabilities.
+ * @throws LibvirtHypervisorException failed to query and return the Libvirt hypervisor's host
+ * system capabilities.
+ */
public Capabilities getCapabilites() throws LibvirtHypervisorException
{
Capabilities hypervisorCapabilities = null;
@@ -42,20 +80,41 @@ public abstract class LibvirtHypervisor implements Closeable
return hypervisorCapabilities;
}
- public int getVersion() throws LibvirtHypervisorException
+ /**
+ * Returns the version of the Libvirt hypervisor backend.
+ *
+ * @return version of the Libvirt hypervisor backend.
+ * @throws LibvirtHypervisorException failed to get the version of the Libvirt hypervisor
+ * backend.
+ */
+ public Version getVersion() throws LibvirtHypervisorException
{
- int hypervisorVersion = 0;
+ long hypervisorVersionRaw = 0;
+ Version hypervisorVersion = null;
try {
- final long hypervisorVersionLong = this.hypervisor.getVersion();
- hypervisorVersion = Long.valueOf( hypervisorVersionLong ).intValue();
+ hypervisorVersionRaw = this.hypervisor.getVersion();
} catch ( LibvirtException e ) {
throw new LibvirtHypervisorException( e.getLocalizedMessage() );
}
+ if ( hypervisorVersionRaw > 0 ) {
+ final short major = Long.valueOf( hypervisorVersionRaw / Long.valueOf( 1000000 ) ).shortValue();
+ hypervisorVersionRaw %= Long.valueOf( 1000000 );
+ final short minor = Long.valueOf( hypervisorVersionRaw / Long.valueOf( 1000 ) ).shortValue();
+ hypervisorVersion = new Version( major, minor );
+ }
+
return hypervisorVersion;
}
+ /**
+ * Register a virtual machine by the Libvirt hypervisor based on a virtualization configuration.
+ *
+ * @param vmConfiguration virtualization configuration for the virtual machine.
+ * @return instance of the registered and defined virtual machine.
+ * @throws LibvirtHypervisorException failed to register and define virtual machine.
+ */
public LibvirtVirtualMachine registerVm( org.openslx.libvirt.domain.Domain vmConfiguration )
throws LibvirtHypervisorException
{
@@ -71,6 +130,13 @@ public abstract class LibvirtHypervisor implements Closeable
return new LibvirtVirtualMachine( libvirtDomain );
}
+ /**
+ * Deregisters an already registered virtual machine by the Libvirt hypervisor.
+ *
+ * @param vm virtual machine that should be deregistered
+ * @throws LibvirtHypervisorException failed to deregister virtual machine by the Libvirt hypervisor.
+ * @throws LibvirtVirtualMachineException failed to check and stop the virtual machine.
+ */
public void deregisterVm( LibvirtVirtualMachine vm )
throws LibvirtHypervisorException, LibvirtVirtualMachineException
{
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtHypervisorException.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtHypervisorException.java
index acf640e1..64ae6b20 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtHypervisorException.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtHypervisorException.java
@@ -1,5 +1,11 @@
package org.openslx.runvirt.virtualization;
+/**
+ * An exception of a Libvirt hypervisor error during acquiring the hypervisor's functionality.
+ *
+ * @author Manuel Bentele
+ * @version 1.0
+ */
public class LibvirtHypervisorException extends Exception
{
/**
@@ -7,6 +13,11 @@ public class LibvirtHypervisorException extends Exception
*/
private static final long serialVersionUID = -3631452625806770209L;
+ /**
+ * Creates a Libvirt hypervisor exception including an error message.
+ *
+ * @param errorMsg message to describe a specific Libvirt hypervisor error.
+ */
LibvirtHypervisorException( String errorMsg )
{
super( errorMsg );
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtVirtualMachine.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtVirtualMachine.java
index 781bd938..32b99d66 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtVirtualMachine.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtVirtualMachine.java
@@ -3,20 +3,45 @@ package org.openslx.runvirt.virtualization;
import org.libvirt.Domain;
import org.libvirt.LibvirtException;
+/**
+ * Representation of a Libvirt virtual machine.
+ *
+ * @author Manuel Bentele
+ * @version 1.0
+ */
public class LibvirtVirtualMachine
{
+ /**
+ * Libvirt virtualization configuration of the virtual machine.
+ */
private Domain domain;
+ /**
+ * Creates a new Libvirt virtual machine specified by a virtualization configuration.
+ *
+ * @param vm Libvirt virtualization configuration to specify the Libvirt virtual machine.
+ */
LibvirtVirtualMachine( Domain vm )
{
this.domain = vm;
}
+ /**
+ * Returns the Libvirt virtualization configuration of the Libvirt virtual machine.
+ *
+ * @return Libvirt virtualization configuration of the Libvirt virtual machine.
+ */
public Domain getLibvirtDomain()
{
return this.domain;
}
+ /**
+ * Checks if the Libvirt virtual machine is running.
+ *
+ * @return state of the Libvirt virtual machine whether it is running or not.
+ * @throws LibvirtVirtualMachineException failed to check if Libvirt machine is running or not.
+ */
public boolean isRunning() throws LibvirtVirtualMachineException
{
int state = 0;
@@ -30,6 +55,11 @@ public class LibvirtVirtualMachine
return ( state == 0 ) ? false : true;
}
+ /**
+ * Starts the Libvirt virtual machine.
+ *
+ * @throws LibvirtVirtualMachineException failed to start the Libvirt virtual machine.
+ */
public void start() throws LibvirtVirtualMachineException
{
if ( !this.isRunning() ) {
@@ -41,6 +71,11 @@ public class LibvirtVirtualMachine
}
}
+ /**
+ * Stops the Libvirt virtual machine.
+ *
+ * @throws LibvirtVirtualMachineException failed to stop the Libvirt virtual machine.
+ */
public void stop() throws LibvirtVirtualMachineException
{
if ( this.isRunning() ) {
@@ -52,6 +87,11 @@ public class LibvirtVirtualMachine
}
}
+ /**
+ * Suspends the Libvirt virtual machine.
+ *
+ * @throws LibvirtVirtualMachineException failed to suspend the Libvirt virtual machine.
+ */
public void suspend() throws LibvirtVirtualMachineException
{
try {
@@ -61,6 +101,11 @@ public class LibvirtVirtualMachine
}
}
+ /**
+ * Resumes the Libvirt virtual machine.
+ *
+ * @throws LibvirtVirtualMachineException faild to resume the Libvirt virtual machine.
+ */
public void resume() throws LibvirtVirtualMachineException
{
try {
@@ -70,6 +115,11 @@ public class LibvirtVirtualMachine
}
}
+ /**
+ * Reboot the Libvirt virtual machine.
+ *
+ * @throws LibvirtVirtualMachineException failed to reboot the Libvirt virtual machine.
+ */
public void reboot() throws LibvirtVirtualMachineException
{
try {
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtVirtualMachineException.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtVirtualMachineException.java
index 4e8ee1ba..dd490be3 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtVirtualMachineException.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtVirtualMachineException.java
@@ -1,5 +1,11 @@
package org.openslx.runvirt.virtualization;
+/**
+ * An exception of a Libvirt virtual machine error during controlling the virtual machine.
+ *
+ * @author Manuel Bentele
+ * @version 1.0
+ */
public class LibvirtVirtualMachineException extends Exception
{
/**
@@ -7,6 +13,11 @@ public class LibvirtVirtualMachineException extends Exception
*/
private static final long serialVersionUID = -5371327391243047616L;
+ /**
+ * Creates a Libvirt virtual machine exception including an error message.
+ *
+ * @param errorMsg message to describe a specific Libvirt virtual machine error.
+ */
public LibvirtVirtualMachineException( String errorMsg )
{
super( errorMsg );