diff options
author | Victor Mocanu | 2018-01-24 13:52:09 +0100 |
---|---|---|
committer | Victor Mocanu | 2018-01-24 13:52:09 +0100 |
commit | 21654d6941c5a6884aab93e55e92039fb1bba7a7 (patch) | |
tree | e510cba9f8053ac162d88d7ff6de48be3c4d7b44 | |
parent | [VBox] removed debug messages (diff) | |
download | master-sync-shared-21654d6941c5a6884aab93e55e92039fb1bba7a7.tar.gz master-sync-shared-21654d6941c5a6884aab93e55e92039fb1bba7a7.tar.xz master-sync-shared-21654d6941c5a6884aab93e55e92039fb1bba7a7.zip |
[VBox] added new QemuMetaData class, class is built to work like the vbox and vmware metadata classes
vmmetadata class is expanded to create instances of qemumetadata if needed
-rw-r--r-- | src/main/java/org/openslx/util/vm/DiskImage.java | 18 | ||||
-rw-r--r-- | src/main/java/org/openslx/util/vm/QemuMetaData.java | 223 | ||||
-rw-r--r-- | src/main/java/org/openslx/util/vm/VmMetaData.java | 22 |
3 files changed, 261 insertions, 2 deletions
diff --git a/src/main/java/org/openslx/util/vm/DiskImage.java b/src/main/java/org/openslx/util/vm/DiskImage.java index 297a94c..2a3a861 100644 --- a/src/main/java/org/openslx/util/vm/DiskImage.java +++ b/src/main/java/org/openslx/util/vm/DiskImage.java @@ -17,6 +17,7 @@ public class DiskImage private static final int VMDK_MAGIC = 0x4b444d56; private static final String VDI_PREFIX = "<<< "; private static final String VDI_SUFFIX = "Disk Image >>>"; + private static final String QEMU = "QFI"; public enum ImageFormat { @@ -46,6 +47,8 @@ public class DiskImage return VMDK; if ( virtId.equals( "virtualbox" ) ) return VDI; + if ( virtId.equals( "qemukvm" ) ) + return QCOW2; return null; } } @@ -128,6 +131,21 @@ public class DiskImage } } } + //qcow + file.seek( 0 ); + byte[] qcowBuffer = new byte[ QEMU.length() ]; + file.readFully( qcowBuffer ); + String qcowString = new String( qcowBuffer ); + if ( QEMU.equals( qcowString )) { + // dummy values + this.isStandalone = true; + this.isCompressed = false; + this.isSnapshot = false; + this.format = ImageFormat.QCOW2; + this.subFormat = ""; + this.hwVersion = 0; + return; + } } throw new UnknownImageFormatException(); } diff --git a/src/main/java/org/openslx/util/vm/QemuMetaData.java b/src/main/java/org/openslx/util/vm/QemuMetaData.java new file mode 100644 index 0000000..ddeb87e --- /dev/null +++ b/src/main/java/org/openslx/util/vm/QemuMetaData.java @@ -0,0 +1,223 @@ +package org.openslx.util.vm; + +import java.io.File; +import java.nio.charset.StandardCharsets; +import java.util.List; + +import org.apache.log4j.Logger; +import org.openslx.bwlp.thrift.iface.OperatingSystem; +import org.openslx.bwlp.thrift.iface.Virtualizer; + +public class QemuMetaData extends VmMetaData<VBoxSoundCardMeta, VBoxDDAccelMeta, VBoxHWVersionMeta, VBoxEthernetDevTypeMeta> +{ + // default initiation sequence for 32 and 64 bit os instalations + private static String cpu = "-cpu host -smp 2"; + private static String mem = " -m 1024"; + private static String display = " -vga std"; + private static String network = ""; + //private static String boot = "-boot c"; // maybe used later + // the above strings will take the place of <args> in the config string + private static String config = "qemu-system-i386 <args> <image> -enable-kvm #qemu-system-x86_64 <args> <image> -enable-kvm"; + private static final Logger LOGGER = Logger.getLogger( QemuMetaData.class ); + + private static final Virtualizer virtualizer = new Virtualizer( "qemukvm", "QEMU-KVM" ); + + public QemuMetaData( List<OperatingSystem> osList, File file ) + { + super( osList ); + displayName = "QemuVM"; + setOs( "qemukvm", "anyOs" ); + hdds.add( new HardDisk( "anychipset", DriveBusType.IDE, file.getAbsolutePath() ) ); + } + + public QemuMetaData( List<OperatingSystem> osList, byte[] vmContent ) + { + super( osList ); + config = new String( vmContent ); + displayName = "QemuVM"; + setOs( "qemukvm", "anyOs" ); + } + + private String configWithArgs() + { + String tempString = cpu + mem + display + network; + return config.replaceAll( "<args>", tempString ); + } + + @Override + public byte[] getFilteredDefinitionArray() + { + return configWithArgs().getBytes( StandardCharsets.UTF_8 ); + } + + @Override + public void applySettingsForLocalEdit() + { + String tempS = config.replaceAll( "#", "\n\r" ); + config = tempS; + } + + @Override + public boolean addHddTemplate( File diskImage, String hddMode, String redoDir ) + { + String tempS = config.replaceAll( "<image>", diskImage.getAbsolutePath() ); + config = tempS; + hdds.add( new HardDisk( "anychipset", DriveBusType.IDE, diskImage.getAbsolutePath() ) ); + return true; + } + + @Override + public boolean addHddTemplate( String diskImagePath, String hddMode, String redoDir ) + { + String tempS = config.replaceAll( "<image>", diskImagePath ); + config = tempS; + hdds.add( new HardDisk( "anychipset", DriveBusType.IDE, diskImagePath ) ); + return true; + } + + @Override + public boolean addDefaultNat() + { + return true; + } + + @Override + public void setOs( String vendorOsId ) + { + // TODO Auto-generated method stub + + } + + @Override + public boolean addDisplayName( String name ) + { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean addRam( int mem ) + { + // TODO Auto-generated method stub + return false; + } + + @Override + public void addFloppy( int index, String image, boolean readOnly ) + { + // TODO Auto-generated method stub + + } + + @Override + public boolean addCdrom( String image ) + { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean addCpuCoreCount( int nrOfCores ) + { + // TODO Auto-generated method stub + return false; + } + + @Override + public void setSoundCard( org.openslx.util.vm.VmMetaData.SoundCardType type ) + { + // TODO Auto-generated method stub + + } + + @Override + public org.openslx.util.vm.VmMetaData.SoundCardType getSoundCard() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public void setDDAcceleration( org.openslx.util.vm.VmMetaData.DDAcceleration type ) + { + // TODO Auto-generated method stub + + } + + @Override + public org.openslx.util.vm.VmMetaData.DDAcceleration getDDAcceleration() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public void setHWVersion( org.openslx.util.vm.VmMetaData.HWVersion type ) + { + // TODO Auto-generated method stub + + } + + @Override + public org.openslx.util.vm.VmMetaData.HWVersion getHWVersion() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public void setEthernetDevType( int cardIndex, org.openslx.util.vm.VmMetaData.EthernetDevType type ) + { + // TODO Auto-generated method stub + + } + + @Override + public org.openslx.util.vm.VmMetaData.EthernetDevType getEthernetDevType( int cardIndex ) + { + // TODO Auto-generated method stub + return null; + } + + @Override + public byte[] getDefinitionArray() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean addEthernet( org.openslx.util.vm.VmMetaData.EtherType type ) + { + // TODO Auto-generated method stub + return false; + } + + @Override + public Virtualizer getVirtualizer() + { + return virtualizer; + } + + @Override + public void enableUsb( boolean enabled ) + { + // TODO Auto-generated method stub + + } + + @Override + public boolean disableSuspend() + { + // TODO Auto-generated method stub + return false; + } + + @Override + public void populateTheMaps() + { + // TODO Auto-generated method stub + + } + +} diff --git a/src/main/java/org/openslx/util/vm/VmMetaData.java b/src/main/java/org/openslx/util/vm/VmMetaData.java index 07e8efa..08959d6 100644 --- a/src/main/java/org/openslx/util/vm/VmMetaData.java +++ b/src/main/java/org/openslx/util/vm/VmMetaData.java @@ -295,17 +295,28 @@ public abstract class VmMetaData<T, U, V, W> // meta object needed when reading vm from file public static VmMetaData<?, ?, ?, ?> getInstance( List<OperatingSystem> osList, File file ) throws IOException { + Exception errEx = null; try { return new VmwareMetaData( osList, file ); } catch ( UnsupportedVirtualizerFormatException e ) { LOGGER.debug( "Disk file not .vmdk" ); + errEx = e; } try { return new VboxMetaData( osList, file ); } catch ( UnsupportedVirtualizerFormatException e ) { LOGGER.debug( "Disk file not .vdi" ); + errEx = e; + } + try { + return new QemuMetaData( osList, file ); + } catch ( Exception e ) { + LOGGER.debug( "Disk file not qemu supported format" ); + errEx = e; + } + if ( errEx != null ) { + LOGGER.error( "Unsupported disk file format!", errEx ); } - LOGGER.error( "Unsupported disk file format!" ); return null; } @@ -322,10 +333,17 @@ public abstract class VmMetaData<T, U, V, W> try { LOGGER.debug( "versuche vbox" ); return new VboxMetaData( osList, vmContent, length ); - } catch ( UnsupportedVirtualizerFormatException e ) { + } catch ( UnsupportedVirtualizerFormatException | NullPointerException e ) { LOGGER.debug( "Machine description not in .vbox format." ); errEx = e; } + // how to do this check ?? + try { + return new QemuMetaData( osList, vmContent); + } catch ( Exception e ) { + LOGGER.debug( "Disk file not qemu supported format" ); + errEx = e; + } if ( errEx != null ) { LOGGER.error( "Machine description has an unknown format!", errEx ); } |