summaryrefslogtreecommitdiffstats
path: root/src/main/java
diff options
context:
space:
mode:
authorVictor Mocanu2018-01-24 13:52:09 +0100
committerVictor Mocanu2018-01-24 13:52:09 +0100
commit21654d6941c5a6884aab93e55e92039fb1bba7a7 (patch)
treee510cba9f8053ac162d88d7ff6de48be3c4d7b44 /src/main/java
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
Diffstat (limited to 'src/main/java')
-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 );
}