summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Mocanu2018-01-24 13:52:09 +0100
committerVictor Mocanu2018-01-24 13:52:09 +0100
commit21654d6941c5a6884aab93e55e92039fb1bba7a7 (patch)
treee510cba9f8053ac162d88d7ff6de48be3c4d7b44
parent[VBox] removed debug messages (diff)
downloadmaster-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.java18
-rw-r--r--src/main/java/org/openslx/util/vm/QemuMetaData.java223
-rw-r--r--src/main/java/org/openslx/util/vm/VmMetaData.java22
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 );
}