From 09d48d1daf3243907dd74fd5d8078d96c1ee5597 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Mon, 5 Jul 2021 18:44:48 +0200 Subject: [virtualizer] Get rid of --- .../configuration/VirtualizationConfiguration.java | 210 ++++++++------------- 1 file changed, 76 insertions(+), 134 deletions(-) (limited to 'src/main/java/org/openslx/virtualization/configuration/VirtualizationConfiguration.java') diff --git a/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfiguration.java b/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfiguration.java index cd8af1e..15a409f 100644 --- a/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfiguration.java +++ b/src/main/java/org/openslx/virtualization/configuration/VirtualizationConfiguration.java @@ -5,95 +5,25 @@ import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collections; -import java.util.HashMap; import java.util.List; -import java.util.Map; import org.apache.log4j.Logger; import org.openslx.bwlp.thrift.iface.OperatingSystem; import org.openslx.virtualization.Version; +import org.openslx.virtualization.hardware.AbstractConfigurableOption; +import org.openslx.virtualization.hardware.ConfigurationGroups; import org.openslx.virtualization.virtualizer.Virtualizer; /** * Describes a configured virtual machine. This class is parsed from a machine * description, like a *.vmx for VMware machines. */ -public abstract class VirtualizationConfiguration +public abstract class VirtualizationConfiguration { private static final Logger LOGGER = Logger.getLogger( VirtualizationConfiguration.class ); - /* - * Helper types - */ - protected Map soundCards = new HashMap<>(); - protected Map ddacc = new HashMap<>(); - protected Map networkCards = new HashMap<>(); - protected Map usbSpeeds = new HashMap<>(); - private final Virtualizer virtualizer; - /** - * Virtual sound cards types - */ - 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" ); - - public final String displayName; - - private SoundCardType( String dName ) - { - this.displayName = dName; - } - } - - /** - * 3D acceleration types - */ - public static enum DDAcceleration - { - OFF( "Off" ), ON( "On" ); - - public final String displayName; - - private DDAcceleration( String dName ) - { - this.displayName = dName; - } - } - - /** - * Virtual network cards - */ - 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" ); - - public final String displayName; - - private EthernetDevType( String dName ) - { - this.displayName = dName; - } - } - - public static enum UsbSpeed - { - NONE( "None" ), USB1_1( "USB 1.1" ), USB2_0( "USB 2.0" ), USB3_0( "USB 3.0" ); - - public final String displayName; - - private UsbSpeed( String dName ) - { - this.displayName = dName; - } - } public static enum DriveBusType { @@ -118,6 +48,30 @@ public abstract class VirtualizationConfiguration { NAT, BRIDGED, HOST_ONLY; } + + public static class ConfigurableOptionGroup + { + public final ConfigurationGroups groupIdentifier; // Enum? + + public final List availableOptions; + + public ConfigurableOptionGroup( ConfigurationGroups groupIdentifier, List availableOptions ) + { + this.groupIdentifier = groupIdentifier; + this.availableOptions = Collections.unmodifiableList( availableOptions ); + } + + public AbstractConfigurableOption getSelected() + { + for (AbstractConfigurableOption hw : availableOptions) { + if ( hw.isActive() ) + return hw; + } + return null; + } + + } + /* * Members */ @@ -131,44 +85,8 @@ public abstract class VirtualizationConfiguration protected String displayName = null; protected boolean isMachineSnapshot; - - /* - * Getters for virtual hardware - */ - public List getSupportedSoundCards() - { - ArrayList availables = new ArrayList( soundCards.keySet() ); - Collections.sort( availables ); - return availables; - } - - public List getSupportedDDAccs() - { - ArrayList availables = new ArrayList( ddacc.keySet() ); - Collections.sort( availables ); - return availables; - } - - public List getSupportedHWVersions() - { - final List availables = this.getVirtualizer().getSupportedVersions(); - Collections.sort( availables ); - return Collections.unmodifiableList( availables ); - } - - public List getSupportedEthernetDevices() - { - ArrayList availables = new ArrayList( networkCards.keySet() ); - Collections.sort( availables ); - return availables; - } - - public List getSupportedUsbSpeeds() - { - ArrayList availables = new ArrayList<>( usbSpeeds.keySet() ); - Collections.sort( availables ); - return availables; - } + + protected final List configurableOptions = new ArrayList<>(); /** * Get operating system of this VM. @@ -217,6 +135,29 @@ public abstract class VirtualizationConfiguration { return isMachineSnapshot; } + + private class VersionOption extends AbstractConfigurableOption { + + private final Version version; + + public VersionOption( Version version ) + { + super( Integer.toString( version.getVersion() ), version.getName() ); + this.version = version; + } + + @Override + public boolean isActive() + { + return getVirtualizerVersion().equals( version ); + } + + @Override + public void apply() + { + setVirtualizerVersion( version ); + } + } /* * Methods @@ -234,6 +175,16 @@ public abstract class VirtualizationConfiguration } // register virtual hardware models for graphical editing of virtual devices (GPU, sound, USB, ...) + final List availables = this.getVirtualizer().getSupportedVersions(); + //Collections.sort( availables ); // XXX WTF? How did this not break before? It's an unmodifiable collection + if ( availables != null ) { + // XXX List is null for qemu? + List list = new ArrayList<>(); + for ( Version ver : availables ) { + list.add( new VersionOption( ver ) ); + } + configurableOptions.add( new ConfigurableOptionGroup( ConfigurationGroups.HW_VERSION, list ) ); + } this.registerVirtualHW(); } @@ -245,7 +196,7 @@ public abstract class VirtualizationConfiguration * @return VmMetaData object representing the relevant parts of the given machine description * @throws IOException failed to read machine description from specified file. */ - public static VirtualizationConfiguration getInstance( List osList, File file ) + public static VirtualizationConfiguration getInstance( List osList, File file ) throws IOException { try { @@ -281,10 +232,11 @@ public abstract class VirtualizationConfiguration * @param length length of the byte array given as vmContent * @return VmMetaData object representing the relevant parts of the given machine description * @throws IOException failed to read machine description from specified byte stream. + * @throws VirtualizationConfigurationException */ - public static VirtualizationConfiguration getInstance( List osList, byte[] vmContent, + public static VirtualizationConfiguration getInstance( List osList, byte[] vmContent, int length ) - throws IOException + throws IOException, VirtualizationConfigurationException { try { return new VirtualizationConfigurationVmware( osList, vmContent, length ); @@ -306,9 +258,7 @@ public abstract class VirtualizationConfiguration } catch ( VirtualizationConfigurationException e ) { LOGGER.debug( "Not a tar.gz file, for docker container", e ); } - - LOGGER.error( "Could not detect any known virtualizer format" ); - return null; + throw new VirtualizationConfigurationException( "Unknown virtualizer config format" ); } /** @@ -337,27 +287,11 @@ public abstract class VirtualizationConfiguration public abstract boolean addCdrom( String image ); public abstract boolean addCpuCoreCount( int nrOfCores ); - - public abstract void setSoundCard( SoundCardType type ); - - public abstract SoundCardType getSoundCard(); - - public abstract void setDDAcceleration( DDAcceleration type ); - - public abstract DDAcceleration getDDAcceleration(); - + public abstract void setVirtualizerVersion( Version type ); public abstract Version getVirtualizerVersion(); - public abstract void setEthernetDevType( int cardIndex, EthernetDevType type ); - - public abstract EthernetDevType getEthernetDevType( int cardIndex ); - - public abstract void setMaxUsbSpeed( UsbSpeed speed ); - - public abstract UsbSpeed getMaxUsbSpeed(); - public abstract byte[] getConfigurationAsByteArray(); public String getConfigurationAsString() @@ -418,4 +352,12 @@ public abstract class VirtualizationConfiguration * Function used to register virtual devices. */ public abstract void registerVirtualHW(); + + /** + * Get all config options this virtualizer supports, with all available options. + */ + public List getConfigurableOptions() + { + return Collections.unmodifiableList( configurableOptions ); + } } -- cgit v1.2.3-55-g7522