package org.openslx.util.vm; import java.io.File; import java.nio.charset.StandardCharsets; 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.bwlp.thrift.iface.Virtualizer; import org.openslx.thrifthelper.TConst; public class QemuMetaData extends VmMetaData { private Map arguments = new HashMap(); // the above map's elements will take the place of in the config string private static String config = "qemu-system-i386 -enable-kvm \n\r qemu-system-x86_64 -enable-kvm"; private static final Logger LOGGER = Logger.getLogger( QemuMetaData.class ); private static final Virtualizer virtualizer = new Virtualizer( TConst.VIRT_QEMU, "QEMU-KVM" ); public QemuMetaData( List osList, File file ) { super( osList ); displayName = file.getName().substring( 0, file.getName().indexOf( "." ) ); setOs( "anyOs" ); hdds.add( new HardDisk( "anychipset", DriveBusType.IDE, file.getAbsolutePath() ) ); makeStartSequence(); } public QemuMetaData( List osList, byte[] vmContent ) { super( osList ); config = new String( vmContent ); displayName = "QemuVM"; setOs( "anyOs" ); } // initiates the arguments map with a default working sequence that will later be used in the definition array public void makeStartSequence() { arguments.put( "cpu", "host" ); arguments.put( "smp", "2" ); arguments.put( "m", "1024" ); arguments.put( "vga", "std" ); } private String configWithArgs() { String tempString = ""; for ( String key : arguments.keySet() ) { tempString += "-" + key + " " + arguments.get( key ) + " "; } return config.replaceAll( "", tempString ); } @Override public byte[] getFilteredDefinitionArray() { return configWithArgs().getBytes( StandardCharsets.UTF_8 ); } @Override public void applySettingsForLocalEdit() { } @Override public boolean addHddTemplate( File diskImage, String hddMode, String redoDir ) { String tempS = config.replaceAll( "", 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( "", 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 ) { setOs( TConst.VIRT_QEMU, vendorOsId ); } @Override public boolean addDisplayName( String name ) { // TODO Auto-generated method stub return false; } @Override public boolean addRam( int mem ) { this.arguments.put( "m", Integer.toString( mem ) ); return true; } @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 ) { this.arguments.put( "smp", Integer.toString( nrOfCores ) ); return true; } @Override public void setSoundCard( VmMetaData.SoundCardType type ) { } @Override public VmMetaData.SoundCardType getSoundCard() { return null; } @Override public void setDDAcceleration( VmMetaData.DDAcceleration type ) { } @Override public VmMetaData.DDAcceleration getDDAcceleration() { return null; } @Override public void setHWVersion( VmMetaData.HWVersion type ) { } @Override public VmMetaData.HWVersion getHWVersion() { return null; } @Override public void setEthernetDevType( int cardIndex, VmMetaData.EthernetDevType type ) { } @Override public VmMetaData.EthernetDevType getEthernetDevType( int cardIndex ) { return null; } @Override public byte[] getDefinitionArray() { return configWithArgs().getBytes( StandardCharsets.UTF_8 ); } @Override public boolean addEthernet( VmMetaData.EtherType type ) { return false; } @Override public Virtualizer getVirtualizer() { return virtualizer; } @Override public void enableUsb( boolean enabled ) { // TODO test this properly if ( enabled ) { arguments.put( "usb", "" ); } else { arguments.remove( "usb" ); } } @Override public boolean disableSuspend() { return false; } @Override public void registerVirtualHW() { } }