summaryrefslogtreecommitdiffstats
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/openslx/virtualization/configuration/VirtualizationConfiguration.java41
-rw-r--r--src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationDocker.java5
-rw-r--r--src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationQemu.java77
-rw-r--r--src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationQemuUtils.java2
-rw-r--r--src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationVirtualBox.java5
-rw-r--r--src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationVmware.java6
6 files changed, 91 insertions, 45 deletions
diff --git a/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfiguration.java b/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfiguration.java
index 3cbe71b..c5381c5 100644
--- a/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfiguration.java
+++ b/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfiguration.java
@@ -30,7 +30,7 @@ public abstract class VirtualizationConfiguration<T, U, W, X>
protected Map<DDAcceleration, U> ddacc = new HashMap<>();
protected Map<EthernetDevType, W> networkCards = new HashMap<>();
protected Map<UsbSpeed, X> usbSpeeds = new HashMap<>();
-
+
private final Virtualizer virtualizer;
/**
@@ -38,7 +38,8 @@ public abstract class VirtualizationConfiguration<T, U, W, X>
*/
public static enum SoundCardType
{
- NONE( "None" ), DEFAULT( "(default)" ), SOUND_BLASTER( "Sound Blaster 16" ), ES( "ES 1371" ), HD_AUDIO( "Intel Integrated HD Audio" ), AC( "Intel ICH Audio Codec 97" );
+ NONE( "None" ), DEFAULT( "(default)" ), SOUND_BLASTER( "Sound Blaster 16" ), ES( "ES 1371" ), HD_AUDIO(
+ "Intel Integrated HD Audio" ), AC( "Intel ICH Audio Codec 97" );
public final String displayName;
@@ -68,9 +69,12 @@ public abstract class VirtualizationConfiguration<T, U, W, X>
*/
public static enum EthernetDevType
{
- AUTO( "(default)" ), PCNET32( "AMD PCnet32" ), E1000( "Intel E1000 (PCI)" ), E1000E( "Intel E1000e (PCI-Express)" ), VMXNET( "VMXnet" ), VMXNET3( "VMXnet 3" ), PCNETPCI2(
- "PCnet-PCI II" ), PCNETFAST3( "PCnet-FAST III" ), PRO1000MTD( "Intel PRO/1000 MT Desktop" ), PRO1000TS(
- "Intel PRO/1000 T Server" ), PRO1000MTS( "Intel PRO/1000 MT Server" ), PARAVIRT( "Paravirtualized Network" ), NONE( "No Network Card" );
+ AUTO( "(default)" ), PCNET32( "AMD PCnet32" ), E1000( "Intel E1000 (PCI)" ), E1000E(
+ "Intel E1000e (PCI-Express)" ), VMXNET( "VMXnet" ), VMXNET3( "VMXnet 3" ), PCNETPCI2(
+ "PCnet-PCI II" ), PCNETFAST3( "PCnet-FAST III" ), PRO1000MTD(
+ "Intel PRO/1000 MT Desktop" ), PRO1000TS(
+ "Intel PRO/1000 T Server" ), PRO1000MTS( "Intel PRO/1000 MT Server" ), PARAVIRT(
+ "Paravirtualized Network" ), NONE( "No Network Card" );
public final String displayName;
@@ -82,10 +86,7 @@ public abstract class VirtualizationConfiguration<T, U, W, X>
public static enum UsbSpeed
{
- NONE( "None" ),
- USB1_1( "USB 1.1" ),
- USB2_0( "USB 2.0" ),
- USB3_0( "USB 3.0" );
+ NONE( "None" ), USB1_1( "USB 1.1" ), USB2_0( "USB 2.0" ), USB3_0( "USB 3.0" );
public final String displayName;
@@ -271,7 +272,7 @@ public abstract class VirtualizationConfiguration<T, U, W, X>
LOGGER.debug( "Not a Libvirt file", e );
}
try {
- return new VirtualizationConfigurationDocker(osList, file);
+ return new VirtualizationConfigurationDocker( osList, file );
} catch ( VirtualizationConfigurationException e ) {
LOGGER.debug( "Not a tar.gz file, for docker container", e );
}
@@ -289,7 +290,8 @@ public abstract class VirtualizationConfiguration<T, U, W, X>
* @return VmMetaData object representing the relevant parts of the given machine description
* @throws IOException
*/
- public static VirtualizationConfiguration<?, ?, ?, ?> getInstance( List<OperatingSystem> osList, byte[] vmContent, int length )
+ public static VirtualizationConfiguration<?, ?, ?, ?> getInstance( List<OperatingSystem> osList, byte[] vmContent,
+ int length )
throws IOException
{
try {
@@ -316,7 +318,7 @@ public abstract class VirtualizationConfiguration<T, U, W, X>
LOGGER.error( "Could not detect any known virtualizer format" );
return null;
}
-
+
/**
* Returns the file name extension for the virtualization configuration file.
*
@@ -383,6 +385,15 @@ public abstract class VirtualizationConfiguration<T, U, W, X>
}
/**
+ * Validates the virtualization configuration and reports errors if its content is not a valid
+ * virtualization configuration.
+ *
+ * @throws VirtualizationConfigurationException validation of the virtualization configuration
+ * failed.
+ */
+ public abstract void validate() throws VirtualizationConfigurationException;
+
+ /**
* Transforms the virtualization configuration in terms of a privacy filter to filter out
* sensitive information like name of users in absolute paths.
*
@@ -390,7 +401,7 @@ public abstract class VirtualizationConfiguration<T, U, W, X>
* configuration failed.
*/
public abstract void transformPrivacy() throws VirtualizationConfigurationException;
-
+
/**
* Transforms the virtualization configuration applying options that are desired when locally
* editing a virtualized system (e.g. disables automatic DPI scaling).
@@ -399,7 +410,7 @@ public abstract class VirtualizationConfiguration<T, U, W, X>
* configuration failed.
*/
public abstract void transformEditable() throws VirtualizationConfigurationException;
-
+
/**
* Transforms the virtualization configuration applying options that are desired when running a
* virtualized system in a stateless manner.
@@ -408,7 +419,7 @@ public abstract class VirtualizationConfiguration<T, U, W, X>
* configuration failed.
*/
public abstract void transformNonPersistent() throws VirtualizationConfigurationException;
-
+
/**
* Function used to register virtual devices.
*/
diff --git a/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationDocker.java b/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationDocker.java
index 4c727a6..5b1615f 100644
--- a/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationDocker.java
+++ b/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationDocker.java
@@ -200,4 +200,9 @@ public class VirtualizationConfigurationDocker extends VirtualizationConfigurati
public String getFileNameExtension() {
return VirtualizationConfigurationDocker.FILE_NAME_EXTENSION;
}
+
+ @Override
+ public void validate() throws VirtualizationConfigurationException
+ {
+ }
}
diff --git a/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationQemu.java b/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationQemu.java
index bd25f79..716a2f3 100644
--- a/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationQemu.java
+++ b/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationQemu.java
@@ -9,6 +9,7 @@ import java.util.Map.Entry;
import org.openslx.bwlp.thrift.iface.OperatingSystem;
import org.openslx.libvirt.domain.Domain;
+import org.openslx.libvirt.domain.DomainUtils;
import org.openslx.libvirt.domain.device.ControllerUsb;
import org.openslx.libvirt.domain.device.Disk.BusType;
import org.openslx.libvirt.domain.device.Disk.StorageType;
@@ -219,21 +220,6 @@ public class VirtualizationConfigurationQemu extends
private Domain vmConfig = null;
/**
- * Stores current index of added HDD device to the Libvirt XML configuration file.
- */
- private int vmDeviceIndexHddAdd = 0;
-
- /**
- * Stores current index of added CDROM device to the Libvirt XML configuration file.
- */
- private int vmDeviceIndexCdromAdd = 0;
-
- /**
- * Stores current index of added ethernet device to the Libvirt XML configuration file.
- */
- private int vmDeviceIndexEthernetAdd = 0;
-
- /**
* Creates new virtual machine configuration (managed by Libvirt) for the QEMU hypervisor.
*
* @param osList list of operating systems.
@@ -335,7 +321,9 @@ public class VirtualizationConfigurationQemu extends
@Override
public boolean addHddTemplate( String diskImagePath, String hddMode, String redoDir )
{
- return this.addHddTemplate( this.vmDeviceIndexHddAdd++, diskImagePath, hddMode, redoDir );
+ int index = this.vmConfig.getDiskStorageDevices().size() - 1;
+ index = ( index > 0 ) ? index : 0;
+ return this.addHddTemplate( index, diskImagePath, hddMode, redoDir );
}
/**
@@ -369,7 +357,7 @@ public class VirtualizationConfigurationQemu extends
storageDiskDevice.setStorage( StorageType.FILE, diskImagePath );
}
- return false;
+ return true;
}
@Override
@@ -397,13 +385,14 @@ public class VirtualizationConfigurationQemu extends
@Override
public boolean addRam( int mem )
{
- BigInteger memory = BigInteger.valueOf( mem );
+ // convert given memory in MiB to memory in bytes for Libvirt XML Domain API functions
+ final BigInteger memory = DomainUtils.decodeMemory( Integer.toString( mem ), "MiB" );
this.vmConfig.setMemory( memory );
this.vmConfig.setCurrentMemory( memory );
- final boolean isMemorySet = this.vmConfig.getMemory().toString().equals( memory.toString() );
- final boolean isCurrentMemorySet = this.vmConfig.getCurrentMemory().toString().equals( memory.toString() );
+ final boolean isMemorySet = this.vmConfig.getMemory().equals( memory );
+ final boolean isCurrentMemorySet = this.vmConfig.getCurrentMemory().equals( memory );
return isMemorySet && isCurrentMemorySet;
}
@@ -421,18 +410,30 @@ public class VirtualizationConfigurationQemu extends
String targetDevName = VirtualizationConfigurationQemuUtils.createAlphabeticalDeviceName( "fd", index );
floppyDiskDevice.setTargetDevice( targetDevName );
floppyDiskDevice.setReadOnly( readOnly );
- floppyDiskDevice.setStorage( StorageType.FILE, image );
+
+ if ( image == null || image.isEmpty() ) {
+ floppyDiskDevice.removeStorage();
+ } else {
+ floppyDiskDevice.setStorage( StorageType.FILE, image );
+ }
} else {
// floppy device exists, so update existing floppy device
floppyDiskDevice.setReadOnly( readOnly );
- floppyDiskDevice.setStorage( StorageType.FILE, image );
+
+ if ( image == null || image.isEmpty() ) {
+ floppyDiskDevice.removeStorage();
+ } else {
+ floppyDiskDevice.setStorage( StorageType.FILE, image );
+ }
}
}
@Override
public boolean addCdrom( String image )
{
- return this.addCdrom( this.vmDeviceIndexCdromAdd++, image );
+ int index = this.vmConfig.getDiskCdromDevices().size() - 1;
+ index = ( index > 0 ) ? index : 0;
+ return this.addCdrom( index, image );
}
/**
@@ -458,7 +459,11 @@ public class VirtualizationConfigurationQemu extends
if ( image == null ) {
cdromDiskDevice.setStorage( StorageType.BLOCK, CDROM_DEFAULT_PHYSICAL_DRIVE );
} else {
- cdromDiskDevice.setStorage( StorageType.FILE, image );
+ if ( image.isEmpty() ) {
+ cdromDiskDevice.removeStorage();
+ } else {
+ cdromDiskDevice.setStorage( StorageType.FILE, image );
+ }
}
} else {
// CDROM device exists, so update existing CDROM device
@@ -467,11 +472,15 @@ public class VirtualizationConfigurationQemu extends
if ( image == null ) {
cdromDiskDevice.setStorage( StorageType.BLOCK, CDROM_DEFAULT_PHYSICAL_DRIVE );
} else {
- cdromDiskDevice.setStorage( StorageType.FILE, image );
+ if ( image.isEmpty() ) {
+ cdromDiskDevice.removeStorage();
+ } else {
+ cdromDiskDevice.setStorage( StorageType.FILE, image );
+ }
}
}
- return false;
+ return true;
}
@Override
@@ -731,7 +740,9 @@ public class VirtualizationConfigurationQemu extends
@Override
public boolean addEthernet( EtherType type )
{
- return this.addEthernet( this.vmDeviceIndexEthernetAdd++, type );
+ int index = this.vmConfig.getInterfaceDevices().size() - 1;
+ index = ( index > 0 ) ? index : 0;
+ return this.addEthernet( index, type );
}
/**
@@ -790,7 +801,7 @@ public class VirtualizationConfigurationQemu extends
}
}
- return false;
+ return true;
}
@Override
@@ -840,4 +851,14 @@ public class VirtualizationConfigurationQemu extends
{
return VirtualizationConfigurationQemu.FILE_NAME_EXTENSION;
}
+
+ @Override
+ public void validate() throws VirtualizationConfigurationException
+ {
+ try {
+ this.vmConfig.validateXml();
+ } catch ( LibvirtXmlValidationException e ) {
+ throw new VirtualizationConfigurationException( e.getLocalizedMessage() );
+ }
+ }
}
diff --git a/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationQemuUtils.java b/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationQemuUtils.java
index 3abc2f3..7ac3632 100644
--- a/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationQemuUtils.java
+++ b/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationQemuUtils.java
@@ -194,7 +194,7 @@ public class VirtualizationConfigurationQemuUtils
throw new IllegalArgumentException( errorMsg );
}
- return devicePrefix + ( 'a' + deviceNumber );
+ return devicePrefix + Character.valueOf( (char) ( 'a' + deviceNumber ) ).toString();
}
/**
diff --git a/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationVirtualBox.java b/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationVirtualBox.java
index d987495..d32d496 100644
--- a/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationVirtualBox.java
+++ b/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationVirtualBox.java
@@ -508,4 +508,9 @@ public class VirtualizationConfigurationVirtualBox extends VirtualizationConfigu
{
return VirtualizationConfigurationVirtualBox.FILE_NAME_EXTENSION;
}
+
+ @Override
+ public void validate() throws VirtualizationConfigurationException
+ {
+ }
}
diff --git a/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationVmware.java b/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationVmware.java
index 894f52b..e1102b6 100644
--- a/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationVmware.java
+++ b/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfigurationVmware.java
@@ -590,7 +590,7 @@ public class VirtualizationConfigurationVmware extends VirtualizationConfigurati
public boolean addCpuCoreCount( int numCores )
{
// TODO actually add the cpu core count to the machine description
- return false;
+ return true;
}
@Override
@@ -631,4 +631,8 @@ public class VirtualizationConfigurationVmware extends VirtualizationConfigurati
return VirtualizationConfigurationVmware.FILE_NAME_EXTENSION;
}
+ @Override
+ public void validate() throws VirtualizationConfigurationException
+ {
+ }
}