diff options
author | Christopher Lucas | 2018-12-05 17:45:04 +0100 |
---|---|---|
committer | Christopher Lucas | 2018-12-05 17:45:04 +0100 |
commit | 888f9e490cc3f03cc9399f779344c25d3082eafa (patch) | |
tree | 041d8a5a6dc02c1647cf0d8ec764873f1c5e14b4 /src/main/java/org/openslx/util/vm/VmMetaData.java | |
parent | [thrift] Sat interface for getting predefined shares/filters (diff) | |
download | master-sync-shared-888f9e490cc3f03cc9399f779344c25d3082eafa.tar.gz master-sync-shared-888f9e490cc3f03cc9399f779344c25d3082eafa.tar.xz master-sync-shared-888f9e490cc3f03cc9399f779344c25d3082eafa.zip |
Upload and Download image with config file working
Diffstat (limited to 'src/main/java/org/openslx/util/vm/VmMetaData.java')
-rw-r--r-- | src/main/java/org/openslx/util/vm/VmMetaData.java | 640 |
1 files changed, 313 insertions, 327 deletions
diff --git a/src/main/java/org/openslx/util/vm/VmMetaData.java b/src/main/java/org/openslx/util/vm/VmMetaData.java index aafb6a4..b260bc1 100644 --- a/src/main/java/org/openslx/util/vm/VmMetaData.java +++ b/src/main/java/org/openslx/util/vm/VmMetaData.java @@ -18,343 +18,329 @@ import org.openslx.bwlp.thrift.iface.Virtualizer; * Describes a configured virtual machine. This class is parsed from a machine * description, like a *.vmx for VMware machines. */ -public abstract class VmMetaData<T, U, V, W> -{ - private static final Logger LOGGER = Logger.getLogger( VmMetaData.class ); +public abstract class VmMetaData<T, U, V, W> { - /* + private static final Logger LOGGER = Logger.getLogger(VmMetaData.class); + + /* * Helper types - */ - protected Map<SoundCardType, T> soundCards = new HashMap<>(); - protected Map<DDAcceleration, U> ddacc = new HashMap<>(); - protected Map<HWVersion, V> hwversion = new HashMap<>(); - protected Map<EthernetDevType, W> networkCards = new HashMap<>(); - - /** - * 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 hardware version - currently only in use for VMPlayer - */ - public static enum HWVersion - { - NONE( "(invalid)" ), THREE( " 3 (Workstation 4/5, Player 1)" ), FOUR( " 4 (Workstation 4/5, Player 1/2, Fusion 1)" ), SIX( " 6 (Workstation 6)" ), SEVEN( - " 7 (Workstation 6.5/7, Player 3, Fusion 2/3)" ), EIGHT( " 8 (Workstation 8, Player/Fusion 4)" ), NINE( " 9 (Workstation 9, Player/Fusion 5)" ), TEN( - "10 (Workstation 10, Player/Fusion 6)" ), ELEVEN( - "11 (Workstation 11, Player/Fusion 7)" ), TWELVE( "12 (Workstation/Player 12, Fusion 8)" ), DEFAULT( "default" ); - - public final String displayName; - - private HWVersion( 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 DriveBusType - { - SCSI, IDE, SATA; - } - - public static class HardDisk - { - public final String chipsetDriver; - public final DriveBusType bus; - public final String diskImage; - - public HardDisk( String chipsetDriver, DriveBusType bus, String diskImage ) - { - this.chipsetDriver = chipsetDriver; - this.bus = bus; - this.diskImage = diskImage; - } - } - - public static enum EtherType - { - NAT, BRIDGED, HOST_ONLY; - } - /* + */ + protected Map<SoundCardType, T> soundCards = new HashMap<>(); + protected Map<DDAcceleration, U> ddacc = new HashMap<>(); + protected Map<HWVersion, V> hwversion = new HashMap<>(); + protected Map<EthernetDevType, W> networkCards = new HashMap<>(); + + /** + * 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 hardware version - currently only in use for VMPlayer + */ + public static enum HWVersion { + NONE("(invalid)"), THREE(" 3 (Workstation 4/5, Player 1)"), FOUR(" 4 (Workstation 4/5, Player 1/2, Fusion 1)"), SIX(" 6 (Workstation 6)"), SEVEN( + " 7 (Workstation 6.5/7, Player 3, Fusion 2/3)"), EIGHT(" 8 (Workstation 8, Player/Fusion 4)"), NINE(" 9 (Workstation 9, Player/Fusion 5)"), TEN( + "10 (Workstation 10, Player/Fusion 6)"), ELEVEN( + "11 (Workstation 11, Player/Fusion 7)"), TWELVE("12 (Workstation/Player 12, Fusion 8)"), DEFAULT("default"); + + public final String displayName; + + private HWVersion(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"), VIRTIO("Virtual High Performance Ethernet card"), RTL8139("Realtek Fast Ethernet "), NONE("No Network Card"); + + public final String displayName; + + private EthernetDevType(String dName) { + this.displayName = dName; + } + } + + public static enum DriveBusType { + SCSI, IDE, SATA; + } + + public static class HardDisk { + + public final String chipsetDriver; + public final DriveBusType bus; + public final String diskImage; + + public HardDisk(String chipsetDriver, DriveBusType bus, String diskImage) { + this.chipsetDriver = chipsetDriver; + this.bus = bus; + this.diskImage = diskImage; + } + } + + public static enum EtherType { + NAT, BRIDGED, HOST_ONLY; + } + /* * Members - */ + */ - protected final List<HardDisk> hdds = new ArrayList<>(); + protected final List<HardDisk> hdds = new ArrayList<>(); - private final List<OperatingSystem> osList; + private final List<OperatingSystem> osList; - private OperatingSystem os = null; + private OperatingSystem os = null; - protected String displayName = null; + protected String displayName = null; - protected boolean isMachineSnapshot; + protected boolean isMachineSnapshot; - /* + /* * Getters for virtual hardware - */ - public List<SoundCardType> getSupportedSoundCards() - { - ArrayList<SoundCardType> availables = new ArrayList<SoundCardType>( soundCards.keySet() ); - Collections.sort( availables ); - return availables; - } - - public List<DDAcceleration> getSupportedDDAccs() - { - ArrayList<DDAcceleration> availables = new ArrayList<DDAcceleration>( ddacc.keySet() ); - Collections.sort( availables ); - return availables; - } - - public List<HWVersion> getSupportedHWVersions() - { - ArrayList<HWVersion> availables = new ArrayList<HWVersion>( hwversion.keySet() ); - Collections.sort( availables ); - return availables; - } - - public List<EthernetDevType> getSupportedEthernetDevices() - { - ArrayList<EthernetDevType> availables = new ArrayList<EthernetDevType>( networkCards.keySet() ); - Collections.sort( availables ); - return availables; - } - - /** - * Get operating system of this VM. - */ - public OperatingSystem getOs() - { - return os; - } - - /** - * Get all hard disks of this VM. - */ - public List<HardDisk> getHdds() - { - return Collections.unmodifiableList( hdds ); - } - - /** - * Get display name of VM. - */ - public String getDisplayName() - { - return displayName; - } - - /* + */ + public List<SoundCardType> getSupportedSoundCards() { + ArrayList<SoundCardType> availables = new ArrayList<SoundCardType>(soundCards.keySet()); + Collections.sort(availables); + return availables; + } + + public List<DDAcceleration> getSupportedDDAccs() { + ArrayList<DDAcceleration> availables = new ArrayList<DDAcceleration>(ddacc.keySet()); + Collections.sort(availables); + return availables; + } + + public List<HWVersion> getSupportedHWVersions() { + ArrayList<HWVersion> availables = new ArrayList<HWVersion>(hwversion.keySet()); + Collections.sort(availables); + return availables; + } + + public List<EthernetDevType> getSupportedEthernetDevices() { + ArrayList<EthernetDevType> availables = new ArrayList<EthernetDevType>(networkCards.keySet()); + Collections.sort(availables); + return availables; + } + + /** + * Get operating system of this VM. + */ + public OperatingSystem getOs() { + return os; + } + + /** + * Get all hard disks of this VM. + */ + public List<HardDisk> getHdds() { + return Collections.unmodifiableList(hdds); + } + + /** + * Get display name of VM. + */ + public String getDisplayName() { + return displayName; + } + + /* * Getter for isMachineSnapshot - */ - public boolean isMachineSnapshot() - { - return isMachineSnapshot; - } - - /** - * This method should return a minimal representation of the input meta data. - * The representation is platform dependent, and should be stripped of all - * non-essential configuration, such as CD/DVD/FLoppy drives, serial or parallel - * ports, shared folders, or anything else that could be considered sensible - * information (absolute paths containing the local user's name). - */ - public abstract byte[] getFilteredDefinitionArray(); - - public final ByteBuffer getFilteredDefinition() - { - return ByteBuffer.wrap( getFilteredDefinitionArray() ); - } - - /* + */ + public boolean isMachineSnapshot() { + return isMachineSnapshot; + } + + /** + * This method should return a minimal representation of the input meta + * data. The representation is platform dependent, and should be stripped of + * all non-essential configuration, such as CD/DVD/FLoppy drives, serial or + * parallel ports, shared folders, or anything else that could be considered + * sensible information (absolute paths containing the local user's name). + */ + public abstract byte[] getFilteredDefinitionArray(); + + public final ByteBuffer getFilteredDefinition() { + return ByteBuffer.wrap(getFilteredDefinitionArray()); + } + + /* * Methods - */ - - public VmMetaData( List<OperatingSystem> osList ) - { - this.osList = osList; - } - - /** - * Called from subclass to set the OS. If the OS cannot be determined from the - * given parameters, it will not be set. - * - * @param virtId - * virtualizer, eg "vmware" for VMware - * @param virtOsId - * the os identifier used by the virtualizer, eg. windows7-64 for - * 64bit Windows 7 on VMware - */ - protected final void setOs( String virtId, String virtOsId ) - { - OperatingSystem lazyMatch = null; - for ( OperatingSystem os : osList ) { - if ( os.getVirtualizerOsId() == null ) - continue; - for ( Entry<String, String> entry : os.getVirtualizerOsId().entrySet() ) { - if ( !entry.getValue().equals( virtOsId ) ) - continue; - if ( entry.getKey().equals( virtId ) ) { - this.os = os; - return; - } else { - lazyMatch = os; - } - } - } - this.os = lazyMatch; - } - - /** - * Apply config options that are desired when locally editing a VM. for vmware, - * this disables automatic DPI scaling of the guest. - */ - public abstract void applySettingsForLocalEdit(); - - /** - * Returns a VmMetaData instance of the given machine description given as file - * - * @param osList List of supported operating systems - * @param file VM's machine description file to get the metadata instance from - * @return VmMetaData object representing the relevant parts of the given machine description - */ - public static VmMetaData<?, ?, ?, ?> getInstance( List<OperatingSystem> osList, File file ) - throws IOException - { - try { - return new VmwareMetaData( osList, file ); - } catch ( UnsupportedVirtualizerFormatException e ) { - LOGGER.info( "Not a VMware file", e ); - } - try { - return new VboxMetaData( osList, file ); - } catch ( UnsupportedVirtualizerFormatException e ) { - LOGGER.info( "Not a VirtualBox file", e ); - } - try { - return new QemuMetaData( osList, file ); - } catch ( Exception e ) { - LOGGER.info( "Not a QEmu file", e ); - } - LOGGER.error( "Could not detect any known virtualizer format" ); - return null; - } - - /** - * Returns a VmMetaData instance of the given machine description given as a byte array - * - * @param osList List of supported operating systems - * @param vmContent VM's machine description as byte array (e.g. stored in DB) - * @param length length of the byte array given as vmContent - * @return VmMetaData object representing the relevant parts of the given machine description - * @throws IOException - */ - public static VmMetaData<?, ?, ?, ?> getInstance( List<OperatingSystem> osList, byte[] vmContent, int length ) throws IOException - { - try { - return new VmwareMetaData( osList, vmContent, length ); - } catch ( UnsupportedVirtualizerFormatException e ) { - LOGGER.info( "Not a VMware file", e ); - } - try { - return new VboxMetaData( osList, vmContent, length ); - } catch ( UnsupportedVirtualizerFormatException e ) { - LOGGER.info( "Not a VirtualBox file", e ); - } - // TODO QEmu -- hack above expects qcow2 file, so we can't do anything here yet - LOGGER.error( "Could not detect any known virtualizer format" ); - return null; - } - - public abstract boolean addHddTemplate( File diskImage, String hddMode, String redoDir ); - - public abstract boolean addHddTemplate( String diskImagePath, String hddMode, String redoDir ); - - public abstract boolean addDefaultNat(); - - public abstract void setOs( String vendorOsId ); - - public abstract boolean addDisplayName( String name ); - - public abstract boolean addRam( int mem ); - - public abstract void addFloppy( int index, String image, boolean readOnly ); - - 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 setHWVersion( HWVersion type ); - - public abstract HWVersion getHWVersion(); - - public abstract void setEthernetDevType( int cardIndex, EthernetDevType type ); - - public abstract EthernetDevType getEthernetDevType( int cardIndex ); - - public abstract byte[] getDefinitionArray(); - - public abstract boolean addEthernet( EtherType type ); - - public abstract Virtualizer getVirtualizer(); - - public abstract void enableUsb( boolean enabled ); - - public abstract boolean disableSuspend(); - - /** - * Function used to register virtual devices - */ - public abstract void registerVirtualHW(); + */ + public VmMetaData(List<OperatingSystem> osList) { + this.osList = osList; + } + + /** + * Called from subclass to set the OS. If the OS cannot be determined from + * the given parameters, it will not be set. + * + * @param virtId virtualizer, eg "vmware" for VMware + * @param virtOsId the os identifier used by the virtualizer, eg. + * windows7-64 for 64bit Windows 7 on VMware + */ + protected final void setOs(String virtId, String virtOsId) { + OperatingSystem lazyMatch = null; + for (OperatingSystem os : osList) { + if (os.getVirtualizerOsId() == null) { + continue; + } + for (Entry<String, String> entry : os.getVirtualizerOsId().entrySet()) { + if (!entry.getValue().equals(virtOsId)) { + continue; + } + if (entry.getKey().equals(virtId)) { + this.os = os; + return; + } else { + lazyMatch = os; + } + } + } + this.os = lazyMatch; + } + + /** + * Apply config options that are desired when locally editing a VM. for + * vmware, this disables automatic DPI scaling of the guest. + */ + public abstract void applySettingsForLocalEdit(); + + /** + * Returns a VmMetaData instance of the given machine description given as + * file + * + * @param osList List of supported operating systems + * @param file VM's machine description file to get the metadata instance + * from + * @return VmMetaData object representing the relevant parts of the given + * machine description + */ + public static VmMetaData<?, ?, ?, ?> getInstance(List<OperatingSystem> osList, File file) + throws IOException { + try { + return new VmwareMetaData(osList, file); + } catch (UnsupportedVirtualizerFormatException e) { + LOGGER.info("Not a VMware file", e); + } + try { + return new VboxMetaData(osList, file); + } catch (UnsupportedVirtualizerFormatException e) { + LOGGER.info("Not a VirtualBox file", e); + } + try { + return new QemuMetaData(osList, file); + } catch (Exception e) { + LOGGER.info("Not a QEmu file", e); + } + LOGGER.error("Could not detect any known virtualizer format"); + return null; + } + + /** + * Returns a VmMetaData instance of the given machine description given as a + * byte array + * + * @param osList List of supported operating systems + * @param vmContent VM's machine description as byte array (e.g. stored in + * DB) + * @param length length of the byte array given as vmContent + * @return VmMetaData object representing the relevant parts of the given + * machine description + * @throws IOException + */ + public static VmMetaData<?, ?, ?, ?> getInstance(List<OperatingSystem> osList, byte[] vmContent, int length) throws IOException { + try { + return new VmwareMetaData(osList, vmContent, length); + } catch (UnsupportedVirtualizerFormatException e) { + LOGGER.info("Not a VMware file", e); + } + try { + return new VboxMetaData(osList, vmContent, length); + } catch (UnsupportedVirtualizerFormatException e) { + LOGGER.info("Not a VirtualBox file", e); + } + try { + return new QemuMetaData(osList, vmContent, length); + } catch (UnsupportedVirtualizerFormatException e) { + LOGGER.info("Not a VirtualBox file", e); + } + // TODO QEmu -- hack above expects qcow2 file, so we can't do anything here yet + LOGGER.error("Could not detect any known virtualizer format"); + return null; + } + + public abstract boolean addHddTemplate(File diskImage, String hddMode, String redoDir); + + public abstract boolean addHddTemplate(String diskImagePath, String hddMode, String redoDir); + + public abstract boolean addDefaultNat(); + + public abstract void setOs(String vendorOsId); + + public abstract boolean addDisplayName(String name); + + public abstract boolean addRam(int mem); + + public abstract void addFloppy(int index, String image, boolean readOnly); + + 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 setHWVersion(HWVersion type); + + public abstract HWVersion getHWVersion(); + + public abstract void setEthernetDevType(int cardIndex, EthernetDevType type); + + public abstract EthernetDevType getEthernetDevType(int cardIndex); + + public abstract byte[] getDefinitionArray(); + + public abstract boolean addEthernet(EtherType type); + + public abstract Virtualizer getVirtualizer(); + + public abstract void enableUsb(boolean enabled); + + public abstract boolean disableSuspend(); + + /** + * Function used to register virtual devices + */ + public abstract void registerVirtualHW(); } |