You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by da...@apache.org on 2014/05/13 10:33:34 UTC

[1/2] git commit: updated refs/heads/4.4 to 02bd3d0

Repository: cloudstack
Updated Branches:
  refs/heads/4.4 70a3e581e -> 02bd3d067


CLOUDSTACK-6358: As a part of supporting dynamic guest OS defined by user, removing the hard-coded dependencies.
This patch is for XenServer.

1. Local testing on XenServer 6.0.2
2. Successfully got up system VMs
3. Successfully created a CentOS VM
4. Created VM snapshot and reverted to snapshot
5. Manipulated guest_os_hypervisor table for mapping, and checked for correct propagation of platform emulator.

Signed off by :- Nitin Mehta<ni...@citrix.com>


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/1fb358d0
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/1fb358d0
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/1fb358d0

Branch: refs/heads/4.4
Commit: 1fb358d0042d24953ecc48a749d2c132e7590106
Parents: 70a3e58
Author: Amogh Vasekar <am...@citrix.com>
Authored: Wed May 7 14:53:07 2014 -0700
Committer: Daan Hoogland <da...@onecht.net>
Committed: Tue May 13 10:32:41 2014 +0200

----------------------------------------------------------------------
 .../cloud/agent/api/to/VirtualMachineTO.java    |  13 +-
 .../cloud/agent/api/VMSnapshotBaseCommand.java  |  11 +-
 .../vmsnapshot/DefaultVMSnapshotStrategy.java   |  15 +-
 .../test/src/VMSnapshotStrategyTest.java        |  53 ++++++-
 .../storage/helper/HypervisorHelperImpl.java    |  11 ++
 .../src/com/cloud/hypervisor/XenServerGuru.java |  27 ++--
 .../xen/resource/CitrixResourceBase.java        | 155 ++++++++++---------
 .../hypervisor/xen/resource/XcpOssResource.java |  26 ++--
 .../xen/resource/XcpServer16Resource.java       |  12 +-
 .../xen/resource/XcpServerResource.java         |   8 +-
 .../xen/resource/XenServer56FP1Resource.java    |  13 +-
 .../xen/resource/XenServer56Resource.java       |  48 +++---
 .../xen/resource/XenServer56SP2Resource.java    |  13 +-
 .../xen/resource/XenServer600Resource.java      |  14 +-
 .../xen/resource/XenServer602Resource.java      |  15 +-
 .../xen/resource/XenServer610Resource.java      |  13 +-
 .../xen/resource/XenServer620Resource.java      |  26 +++-
 .../xen/resource/XenServer620SP1Resource.java   |  32 ++--
 .../xen/resource/Xenserver625Resource.java      |  13 +-
 19 files changed, 367 insertions(+), 151 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1fb358d0/api/src/com/cloud/agent/api/to/VirtualMachineTO.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/agent/api/to/VirtualMachineTO.java b/api/src/com/cloud/agent/api/to/VirtualMachineTO.java
index bbd8385..45bad79 100644
--- a/api/src/com/cloud/agent/api/to/VirtualMachineTO.java
+++ b/api/src/com/cloud/agent/api/to/VirtualMachineTO.java
@@ -47,6 +47,7 @@ public class VirtualMachineTO {
     String hostName;
     String arch;
     String os;
+    String platformEmulator;
     String bootArgs;
     String[] bootupScripts;
     boolean rebootOnCrash;
@@ -236,7 +237,7 @@ public class VirtualMachineTO {
     }
 
     public String getVncPassword() {
-        return this.vncPassword;
+        return vncPassword;
     }
 
     public void setVncPassword(String vncPassword) {
@@ -244,7 +245,7 @@ public class VirtualMachineTO {
     }
 
     public String getVncAddr() {
-        return this.vncAddr;
+        return vncAddr;
     }
 
     public void setVncAddr(String vncAddr) {
@@ -275,4 +276,12 @@ public class VirtualMachineTO {
         this.gpuDevice = gpuDevice;
     }
 
+    public String getPlatformEmulator() {
+        return platformEmulator;
+    }
+
+    public void setPlatformEmulator(String platformEmulator) {
+        this.platformEmulator = platformEmulator;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1fb358d0/core/src/com/cloud/agent/api/VMSnapshotBaseCommand.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/agent/api/VMSnapshotBaseCommand.java b/core/src/com/cloud/agent/api/VMSnapshotBaseCommand.java
index d2abd54..2752965 100644
--- a/core/src/com/cloud/agent/api/VMSnapshotBaseCommand.java
+++ b/core/src/com/cloud/agent/api/VMSnapshotBaseCommand.java
@@ -26,10 +26,11 @@ public class VMSnapshotBaseCommand extends Command {
     protected VMSnapshotTO target;
     protected String vmName;
     protected String guestOSType;
+    protected String platformEmulator;
 
     public VMSnapshotBaseCommand(String vmName, VMSnapshotTO snapshot, List<VolumeObjectTO> volumeTOs, String guestOSType) {
         this.vmName = vmName;
-        this.target = snapshot;
+        target = snapshot;
         this.volumeTOs = volumeTOs;
         this.guestOSType = guestOSType;
     }
@@ -70,4 +71,12 @@ public class VMSnapshotBaseCommand extends Command {
     public void setGuestOSType(String guestOSType) {
         this.guestOSType = guestOSType;
     }
+
+    public String getPlatformEmulator() {
+        return platformEmulator;
+    }
+
+    public void setPlatformEmulator(String platformEmulator) {
+        this.platformEmulator = platformEmulator;
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1fb358d0/engine/storage/snapshot/src/org/apache/cloudstack/storage/vmsnapshot/DefaultVMSnapshotStrategy.java
----------------------------------------------------------------------
diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/vmsnapshot/DefaultVMSnapshotStrategy.java b/engine/storage/snapshot/src/org/apache/cloudstack/storage/vmsnapshot/DefaultVMSnapshotStrategy.java
index e86bd23..21f4968 100644
--- a/engine/storage/snapshot/src/org/apache/cloudstack/storage/vmsnapshot/DefaultVMSnapshotStrategy.java
+++ b/engine/storage/snapshot/src/org/apache/cloudstack/storage/vmsnapshot/DefaultVMSnapshotStrategy.java
@@ -45,11 +45,15 @@ import com.cloud.event.EventTypes;
 import com.cloud.event.UsageEventUtils;
 import com.cloud.exception.AgentUnavailableException;
 import com.cloud.exception.OperationTimedoutException;
+import com.cloud.host.HostVO;
+import com.cloud.host.dao.HostDao;
 import com.cloud.storage.DiskOfferingVO;
+import com.cloud.storage.GuestOSHypervisorVO;
 import com.cloud.storage.GuestOSVO;
 import com.cloud.storage.VolumeVO;
 import com.cloud.storage.dao.DiskOfferingDao;
 import com.cloud.storage.dao.GuestOSDao;
+import com.cloud.storage.dao.GuestOSHypervisorDao;
 import com.cloud.storage.dao.VolumeDao;
 import com.cloud.uservm.UserVm;
 import com.cloud.utils.NumbersUtil;
@@ -73,6 +77,8 @@ public class DefaultVMSnapshotStrategy extends ManagerBase implements VMSnapshot
     @Inject
     GuestOSDao guestOSDao;
     @Inject
+    GuestOSHypervisorDao guestOsHypervisorDao;
+    @Inject
     UserVmDao userVmDao;
     @Inject
     VMSnapshotDao vmSnapshotDao;
@@ -85,6 +91,8 @@ public class DefaultVMSnapshotStrategy extends ManagerBase implements VMSnapshot
     VolumeDao volumeDao;
     @Inject
     DiskOfferingDao diskOfferingDao;
+    @Inject
+    HostDao hostDao;
 
     @Override
     public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
@@ -108,7 +116,6 @@ public class DefaultVMSnapshotStrategy extends ManagerBase implements VMSnapshot
         boolean result = false;
         try {
             GuestOSVO guestOS = guestOSDao.findById(userVm.getGuestOSId());
-
             List<VolumeObjectTO> volumeTOs = vmSnapshotHelper.getVolumeTOList(userVm.getId());
 
             VMSnapshotTO current = null;
@@ -126,7 +133,10 @@ public class DefaultVMSnapshotStrategy extends ManagerBase implements VMSnapshot
             else
                 vmSnapshotVO.setParent(current.getId());
 
+            HostVO host = hostDao.findById(hostId);
+            GuestOSHypervisorVO guestOsMapping = guestOsHypervisorDao.findByOsIdAndHypervisor(guestOS.getId(), host.getHypervisorType().toString(), host.getHypervisorVersion());
             CreateVMSnapshotCommand ccmd = new CreateVMSnapshotCommand(userVm.getInstanceName(), target, volumeTOs, guestOS.getDisplayName(), userVm.getState());
+            ccmd.setPlatformEmulator(guestOsMapping.getGuestOsName());
             ccmd.setWait(_wait);
 
             answer = (CreateVMSnapshotAnswer)agentMgr.send(hostId, ccmd);
@@ -334,7 +344,10 @@ public class DefaultVMSnapshotStrategy extends ManagerBase implements VMSnapshot
                     snapshot.getCurrent(), parent, true);
             Long hostId = vmSnapshotHelper.pickRunningHost(vmSnapshot.getVmId());
             GuestOSVO guestOS = guestOSDao.findById(userVm.getGuestOSId());
+            HostVO host = hostDao.findById(hostId);
+            GuestOSHypervisorVO guestOsMapping = guestOsHypervisorDao.findByOsIdAndHypervisor(guestOS.getId(), host.getHypervisorType().toString(), host.getHypervisorVersion());
             RevertToVMSnapshotCommand revertToSnapshotCommand = new RevertToVMSnapshotCommand(vmInstanceName, vmSnapshotTO, volumeTOs, guestOS.getDisplayName());
+            revertToSnapshotCommand.setPlatformEmulator(guestOsMapping.getGuestOsName());
 
             RevertToVMSnapshotAnswer answer = (RevertToVMSnapshotAnswer)agentMgr.send(hostId, revertToSnapshotCommand);
             if (answer != null && answer.getResult()) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1fb358d0/engine/storage/snapshot/test/src/VMSnapshotStrategyTest.java
----------------------------------------------------------------------
diff --git a/engine/storage/snapshot/test/src/VMSnapshotStrategyTest.java b/engine/storage/snapshot/test/src/VMSnapshotStrategyTest.java
index 9eaa7e1..6100c59 100644
--- a/engine/storage/snapshot/test/src/VMSnapshotStrategyTest.java
+++ b/engine/storage/snapshot/test/src/VMSnapshotStrategyTest.java
@@ -58,9 +58,14 @@ import com.cloud.agent.api.RevertToVMSnapshotAnswer;
 import com.cloud.agent.api.VMSnapshotTO;
 import com.cloud.exception.AgentUnavailableException;
 import com.cloud.exception.OperationTimedoutException;
+import com.cloud.host.HostVO;
+import com.cloud.host.dao.HostDao;
+import com.cloud.hypervisor.Hypervisor.HypervisorType;
+import com.cloud.storage.GuestOSHypervisorVO;
 import com.cloud.storage.GuestOSVO;
 import com.cloud.storage.dao.DiskOfferingDao;
 import com.cloud.storage.dao.GuestOSDao;
+import com.cloud.storage.dao.GuestOSHypervisorDao;
 import com.cloud.storage.dao.VolumeDao;
 import com.cloud.utils.component.ComponentContext;
 import com.cloud.utils.exception.CloudRuntimeException;
@@ -83,9 +88,13 @@ public class VMSnapshotStrategyTest extends TestCase {
     @Inject
     GuestOSDao guestOSDao;
     @Inject
+    GuestOSHypervisorDao guestOsHypervisorDao;
+    @Inject
     AgentManager agentMgr;
     @Inject
     VMSnapshotDao vmSnapshotDao;
+    @Inject
+    HostDao hostDao;
 
     @Override
     @Before
@@ -98,6 +107,9 @@ public class VMSnapshotStrategyTest extends TestCase {
         Long hostId = 1L;
         Long vmId = 1L;
         Long guestOsId = 1L;
+        HypervisorType hypervisorType = HypervisorType.Any;
+        String hypervisorVersion = "default";
+        String guestOsName = "Other";
         List<VolumeObjectTO> volumeObjectTOs = new ArrayList<VolumeObjectTO>();
         VMSnapshotVO vmSnapshot = Mockito.mock(VMSnapshotVO.class);
         UserVmVO userVmVO = Mockito.mock(UserVmVO.class);
@@ -108,7 +120,15 @@ public class VMSnapshotStrategyTest extends TestCase {
         Mockito.when(userVmDao.findById(Matchers.anyLong())).thenReturn(userVmVO);
         GuestOSVO guestOSVO = Mockito.mock(GuestOSVO.class);
         Mockito.when(guestOSDao.findById(Matchers.anyLong())).thenReturn(guestOSVO);
+        GuestOSHypervisorVO guestOSHypervisorVO = Mockito.mock(GuestOSHypervisorVO.class);
+        Mockito.when(guestOSHypervisorVO.getGuestOsName()).thenReturn(guestOsName);
+        Mockito.when(guestOsHypervisorDao.findById(Matchers.anyLong())).thenReturn(guestOSHypervisorVO);
+        Mockito.when(guestOsHypervisorDao.findByOsIdAndHypervisor(Matchers.anyLong(), Matchers.anyString(), Matchers.anyString())).thenReturn(guestOSHypervisorVO);
         Mockito.when(agentMgr.send(Matchers.anyLong(), Matchers.any(Command.class))).thenReturn(null);
+        HostVO hostVO = Mockito.mock(HostVO.class);
+        Mockito.when(hostDao.findById(Matchers.anyLong())).thenReturn(hostVO);
+        Mockito.when(hostVO.getHypervisorType()).thenReturn(hypervisorType);
+        Mockito.when(hostVO.getHypervisorVersion()).thenReturn(hypervisorVersion);
         Exception e = null;
         try {
             vmSnapshotStrategy.takeVMSnapshot(vmSnapshot);
@@ -131,6 +151,9 @@ public class VMSnapshotStrategyTest extends TestCase {
         Long hostId = 1L;
         Long vmId = 1L;
         Long guestOsId = 1L;
+        HypervisorType hypervisorType = HypervisorType.Any;
+        String hypervisorVersion = "default";
+        String guestOsName = "Other";
         List<VolumeObjectTO> volumeObjectTOs = new ArrayList<VolumeObjectTO>();
         VMSnapshotVO vmSnapshot = Mockito.mock(VMSnapshotVO.class);
         UserVmVO userVmVO = Mockito.mock(UserVmVO.class);
@@ -141,12 +164,20 @@ public class VMSnapshotStrategyTest extends TestCase {
         Mockito.when(userVmDao.findById(Matchers.anyLong())).thenReturn(userVmVO);
         GuestOSVO guestOSVO = Mockito.mock(GuestOSVO.class);
         Mockito.when(guestOSDao.findById(Matchers.anyLong())).thenReturn(guestOSVO);
+        GuestOSHypervisorVO guestOSHypervisorVO = Mockito.mock(GuestOSHypervisorVO.class);
+        Mockito.when(guestOsHypervisorDao.findById(Matchers.anyLong())).thenReturn(guestOSHypervisorVO);
+        Mockito.when(guestOsHypervisorDao.findByOsIdAndHypervisor(Matchers.anyLong(), Matchers.anyString(), Matchers.anyString())).thenReturn(guestOSHypervisorVO);
+        Mockito.when(guestOSHypervisorVO.getGuestOsName()).thenReturn(guestOsName);
         VMSnapshotTO vmSnapshotTO = Mockito.mock(VMSnapshotTO.class);
         Mockito.when(vmSnapshotHelper.getSnapshotWithParents(Matchers.any(VMSnapshotVO.class))).thenReturn(vmSnapshotTO);
         Mockito.when(vmSnapshotDao.findById(Matchers.anyLong())).thenReturn(vmSnapshot);
         Mockito.when(vmSnapshot.getId()).thenReturn(1L);
         Mockito.when(vmSnapshot.getCreated()).thenReturn(new Date());
         Mockito.when(agentMgr.send(Matchers.anyLong(), Matchers.any(Command.class))).thenReturn(null);
+        HostVO hostVO = Mockito.mock(HostVO.class);
+        Mockito.when(hostDao.findById(Matchers.anyLong())).thenReturn(hostVO);
+        Mockito.when(hostVO.getHypervisorType()).thenReturn(hypervisorType);
+        Mockito.when(hostVO.getHypervisorVersion()).thenReturn(hypervisorVersion);
         Exception e = null;
         try {
             vmSnapshotStrategy.revertVMSnapshot(vmSnapshot);
@@ -168,6 +199,9 @@ public class VMSnapshotStrategyTest extends TestCase {
         Long hostId = 1L;
         Long vmId = 1L;
         Long guestOsId = 1L;
+        HypervisorType hypervisorType = HypervisorType.Any;
+        String hypervisorVersion = "default";
+        String guestOsName = "Other";
         List<VolumeObjectTO> volumeObjectTOs = new ArrayList<VolumeObjectTO>();
         VMSnapshotVO vmSnapshot = Mockito.mock(VMSnapshotVO.class);
         UserVmVO userVmVO = Mockito.mock(UserVmVO.class);
@@ -178,13 +212,20 @@ public class VMSnapshotStrategyTest extends TestCase {
         Mockito.when(userVmDao.findById(Matchers.anyLong())).thenReturn(userVmVO);
         GuestOSVO guestOSVO = Mockito.mock(GuestOSVO.class);
         Mockito.when(guestOSDao.findById(Matchers.anyLong())).thenReturn(guestOSVO);
+        GuestOSHypervisorVO guestOSHypervisorVO = Mockito.mock(GuestOSHypervisorVO.class);
+        Mockito.when(guestOSHypervisorVO.getGuestOsName()).thenReturn(guestOsName);
+        Mockito.when(guestOsHypervisorDao.findById(Matchers.anyLong())).thenReturn(guestOSHypervisorVO);
+        Mockito.when(guestOsHypervisorDao.findByOsIdAndHypervisor(Matchers.anyLong(), Matchers.anyString(), Matchers.anyString())).thenReturn(guestOSHypervisorVO);
         VMSnapshotTO vmSnapshotTO = Mockito.mock(VMSnapshotTO.class);
         Mockito.when(vmSnapshotHelper.getSnapshotWithParents(Matchers.any(VMSnapshotVO.class))).thenReturn(vmSnapshotTO);
         Mockito.when(vmSnapshotDao.findById(Matchers.anyLong())).thenReturn(vmSnapshot);
         Mockito.when(vmSnapshot.getId()).thenReturn(1L);
         Mockito.when(vmSnapshot.getCreated()).thenReturn(new Date());
         Mockito.when(agentMgr.send(Matchers.anyLong(), Matchers.any(Command.class))).thenReturn(null);
-
+        HostVO hostVO = Mockito.mock(HostVO.class);
+        Mockito.when(hostDao.findById(Matchers.anyLong())).thenReturn(hostVO);
+        Mockito.when(hostVO.getHypervisorType()).thenReturn(hypervisorType);
+        Mockito.when(hostVO.getHypervisorVersion()).thenReturn(hypervisorVersion);
         Exception e = null;
         try {
             vmSnapshotStrategy.deleteVMSnapshot(vmSnapshot);
@@ -228,6 +269,11 @@ public class VMSnapshotStrategyTest extends TestCase {
         }
 
         @Bean
+        public GuestOSHypervisorDao guestOsHypervisorDao() {
+            return Mockito.mock(GuestOSHypervisorDao.class);
+        }
+
+        @Bean
         public UserVmDao userVmDao() {
             return Mockito.mock(UserVmDao.class);
         }
@@ -256,5 +302,10 @@ public class VMSnapshotStrategyTest extends TestCase {
         public DiskOfferingDao diskOfferingDao() {
             return Mockito.mock(DiskOfferingDao.class);
         }
+
+        @Bean
+        public HostDao hostDao() {
+            return Mockito.mock(HostDao.class);
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1fb358d0/engine/storage/src/org/apache/cloudstack/storage/helper/HypervisorHelperImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/helper/HypervisorHelperImpl.java b/engine/storage/src/org/apache/cloudstack/storage/helper/HypervisorHelperImpl.java
index b41c1fa..ff62fb8 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/helper/HypervisorHelperImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/helper/HypervisorHelperImpl.java
@@ -44,8 +44,12 @@ import com.cloud.agent.api.VMSnapshotTO;
 import com.cloud.agent.api.to.DataTO;
 import com.cloud.exception.AgentUnavailableException;
 import com.cloud.exception.OperationTimedoutException;
+import com.cloud.host.HostVO;
+import com.cloud.host.dao.HostDao;
+import com.cloud.storage.GuestOSHypervisorVO;
 import com.cloud.storage.GuestOSVO;
 import com.cloud.storage.dao.GuestOSDao;
+import com.cloud.storage.dao.GuestOSHypervisorDao;
 import com.cloud.utils.NumbersUtil;
 import com.cloud.utils.exception.CloudRuntimeException;
 import com.cloud.vm.VirtualMachine;
@@ -60,9 +64,13 @@ public class HypervisorHelperImpl implements HypervisorHelper {
     @Inject
     GuestOSDao guestOSDao;
     @Inject
+    GuestOSHypervisorDao guestOsHypervisorDao;
+    @Inject
     ConfigurationDao configurationDao;
     @Inject
     AgentManager agentMgr;
+    @Inject
+    HostDao hostDao;
 
     @Override
     public DataTO introduceObject(DataTO object, Scope scope, Long storeId) {
@@ -117,6 +125,9 @@ public class HypervisorHelperImpl implements HypervisorHelper {
         List<VolumeObjectTO> volumeTOs = vmSnapshotHelper.getVolumeTOList(virtualMachine.getId());
         CreateVMSnapshotCommand ccmd =
             new CreateVMSnapshotCommand(virtualMachine.getInstanceName(), vmSnapshotTO, volumeTOs, guestOS.getDisplayName(), virtualMachine.getState());
+        HostVO host = hostDao.findById(hostId);
+        GuestOSHypervisorVO guestOsMapping = guestOsHypervisorDao.findByOsIdAndHypervisor(guestOS.getId(), host.getHypervisorType().toString(), host.getHypervisorVersion());
+        ccmd.setPlatformEmulator(guestOsMapping.getGuestOsName());
         ccmd.setWait(wait);
         try {
             Answer answer = agentMgr.send(hostId, ccmd);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1fb358d0/plugins/hypervisors/xen/src/com/cloud/hypervisor/XenServerGuru.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/XenServerGuru.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/XenServerGuru.java
index 89e4ab5..620d711 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/XenServerGuru.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/XenServerGuru.java
@@ -22,6 +22,16 @@ import java.util.List;
 import javax.ejb.Local;
 import javax.inject.Inject;
 
+import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
+import org.apache.cloudstack.engine.subsystem.api.storage.EndPointSelector;
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory;
+import org.apache.cloudstack.engine.subsystem.api.storage.ZoneScope;
+import org.apache.cloudstack.hypervisor.xenserver.XenserverConfigs;
+import org.apache.cloudstack.storage.command.CopyCommand;
+import org.apache.cloudstack.storage.command.DettachCommand;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
+import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
+
 import com.cloud.agent.api.Command;
 import com.cloud.agent.api.to.DataObjectType;
 import com.cloud.agent.api.to.DataStoreTO;
@@ -32,30 +42,24 @@ import com.cloud.agent.api.to.VirtualMachineTO;
 import com.cloud.host.HostVO;
 import com.cloud.host.dao.HostDao;
 import com.cloud.hypervisor.Hypervisor.HypervisorType;
+import com.cloud.storage.GuestOSHypervisorVO;
 import com.cloud.storage.GuestOSVO;
 import com.cloud.storage.VolumeVO;
 import com.cloud.storage.dao.GuestOSDao;
+import com.cloud.storage.dao.GuestOSHypervisorDao;
 import com.cloud.storage.dao.VolumeDao;
 import com.cloud.template.VirtualMachineTemplate.BootloaderType;
 import com.cloud.utils.Pair;
 import com.cloud.vm.VirtualMachine;
 import com.cloud.vm.VirtualMachineProfile;
 
-import org.apache.cloudstack.hypervisor.xenserver.XenserverConfigs;
-import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
-import org.apache.cloudstack.engine.subsystem.api.storage.EndPointSelector;
-import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory;
-import org.apache.cloudstack.engine.subsystem.api.storage.ZoneScope;
-import org.apache.cloudstack.storage.command.CopyCommand;
-import org.apache.cloudstack.storage.command.DettachCommand;
-import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
-import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
-
 @Local(value = HypervisorGuru.class)
 public class XenServerGuru extends HypervisorGuruBase implements HypervisorGuru {
     @Inject
     GuestOSDao _guestOsDao;
     @Inject
+    GuestOSHypervisorDao _guestOsHypervisorDao;
+    @Inject
     EndPointSelector endPointSelector;
     @Inject
     HostDao hostDao;
@@ -87,6 +91,9 @@ public class XenServerGuru extends HypervisorGuruBase implements HypervisorGuru
         // Determine the VM's OS description
         GuestOSVO guestOS = _guestOsDao.findById(vm.getVirtualMachine().getGuestOSId());
         to.setOs(guestOS.getDisplayName());
+        HostVO host = hostDao.findById(vm.getVirtualMachine().getHostId());
+        GuestOSHypervisorVO guestOsMapping = _guestOsHypervisorDao.findByOsIdAndHypervisor(guestOS.getId(), getHypervisorType().toString(), host.getHypervisorVersion());
+        to.setPlatformEmulator(guestOsMapping.getGuestOsName());
 
         return to;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1fb358d0/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
index ad37973..10c035d 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
@@ -16,6 +16,77 @@
 // under the License.
 package com.cloud.hypervisor.xen.resource;
 
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Queue;
+import java.util.Random;
+import java.util.Set;
+import java.util.UUID;
+import java.util.concurrent.TimeoutException;
+
+import javax.ejb.Local;
+import javax.naming.ConfigurationException;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.apache.log4j.Logger;
+import org.apache.xmlrpc.XmlRpcException;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+import com.trilead.ssh2.SCPClient;
+import com.xensource.xenapi.Bond;
+import com.xensource.xenapi.Connection;
+import com.xensource.xenapi.Console;
+import com.xensource.xenapi.Host;
+import com.xensource.xenapi.HostCpu;
+import com.xensource.xenapi.HostMetrics;
+import com.xensource.xenapi.Network;
+import com.xensource.xenapi.PBD;
+import com.xensource.xenapi.PIF;
+import com.xensource.xenapi.Pool;
+import com.xensource.xenapi.SR;
+import com.xensource.xenapi.Session;
+import com.xensource.xenapi.Task;
+import com.xensource.xenapi.Types;
+import com.xensource.xenapi.Types.BadServerResponse;
+import com.xensource.xenapi.Types.VmPowerState;
+import com.xensource.xenapi.Types.XenAPIException;
+import com.xensource.xenapi.VBD;
+import com.xensource.xenapi.VBDMetrics;
+import com.xensource.xenapi.VDI;
+import com.xensource.xenapi.VGPU;
+import com.xensource.xenapi.VIF;
+import com.xensource.xenapi.VLAN;
+import com.xensource.xenapi.VM;
+import com.xensource.xenapi.VMGuestMetrics;
+import com.xensource.xenapi.XenAPIObject;
+
+import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
+import org.apache.cloudstack.storage.to.TemplateObjectTO;
+import org.apache.cloudstack.storage.to.VolumeObjectTO;
+
 import com.cloud.agent.IAgentControl;
 import com.cloud.agent.api.Answer;
 import com.cloud.agent.api.AttachIsoCommand;
@@ -177,73 +248,6 @@ import com.cloud.vm.VirtualMachine;
 import com.cloud.vm.VirtualMachine.PowerState;
 import com.cloud.vm.VirtualMachine.State;
 import com.cloud.vm.snapshot.VMSnapshot;
-import com.trilead.ssh2.SCPClient;
-import com.xensource.xenapi.Bond;
-import com.xensource.xenapi.Connection;
-import com.xensource.xenapi.Console;
-import com.xensource.xenapi.Host;
-import com.xensource.xenapi.HostCpu;
-import com.xensource.xenapi.HostMetrics;
-import com.xensource.xenapi.Network;
-import com.xensource.xenapi.PBD;
-import com.xensource.xenapi.PIF;
-import com.xensource.xenapi.Pool;
-import com.xensource.xenapi.SR;
-import com.xensource.xenapi.Session;
-import com.xensource.xenapi.Task;
-import com.xensource.xenapi.Types;
-import com.xensource.xenapi.Types.BadServerResponse;
-import com.xensource.xenapi.Types.VmPowerState;
-import com.xensource.xenapi.Types.XenAPIException;
-import com.xensource.xenapi.VBD;
-import com.xensource.xenapi.VBDMetrics;
-import com.xensource.xenapi.VDI;
-import com.xensource.xenapi.VGPU;
-import com.xensource.xenapi.VIF;
-import com.xensource.xenapi.VLAN;
-import com.xensource.xenapi.VM;
-import com.xensource.xenapi.VMGuestMetrics;
-import com.xensource.xenapi.XenAPIObject;
-import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
-import org.apache.cloudstack.storage.to.TemplateObjectTO;
-import org.apache.cloudstack.storage.to.VolumeObjectTO;
-import org.apache.log4j.Logger;
-import org.apache.xmlrpc.XmlRpcException;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-import java.util.concurrent.TimeoutException;
-
-import javax.ejb.Local;
-import javax.naming.ConfigurationException;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Queue;
-import java.util.Random;
-import java.util.Set;
-import java.util.UUID;
 
 /**
  * CitrixResourceBase encapsulates the calls to the XenServer Xapi process
@@ -804,7 +808,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
             try {
                 vm = getVM(conn, vmName);
             } catch (Exception e) {
-                vm = createWorkingVM(conn, vmName, cmd.getGuestOSType(), listVolumeTo);
+                vm = createWorkingVM(conn, vmName, cmd.getGuestOSType(), cmd.getPlatformEmulator(), listVolumeTo);
             }
 
             if (vm == null) {
@@ -1344,7 +1348,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
     }
 
     protected VM createVmFromTemplate(Connection conn, VirtualMachineTO vmSpec, Host host) throws XenAPIException, XmlRpcException {
-        String guestOsTypeName = getGuestOsType(vmSpec.getOs(), vmSpec.getBootloader() == BootloaderType.CD);
+        String guestOsTypeName = getGuestOsType(vmSpec.getOs(), vmSpec.getPlatformEmulator(), vmSpec.getBootloader() == BootloaderType.CD);
         Set<VM> templates = VM.getByNameLabel(conn, guestOsTypeName);
         if ( templates == null || templates.isEmpty() ){
             s_logger.debug("Cannot find template : " + guestOsTypeName + " on XS version: " + this.getClass().getName());
@@ -1444,7 +1448,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
                         TemplateObjectTO iso = (TemplateObjectTO)disk.getData();
                         String osType = iso.getGuestOsType();
                         if (osType != null) {
-                            String isoGuestOsName = getGuestOsType(osType, vmSpec.getBootloader() == BootloaderType.CD);
+                            String isoGuestOsName = getGuestOsType(osType, vmSpec.getPlatformEmulator(), vmSpec.getBootloader() == BootloaderType.CD);
                             if (!isoGuestOsName.equals(guestOsTypeName)) {
                                 vmSpec.setBootloader(BootloaderType.PyGrub);
                             }
@@ -6437,6 +6441,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
         List<VolumeObjectTO> listVolumeTo = cmd.getVolumeTOs();
         VirtualMachine.State vmState = cmd.getVmState();
         String guestOSType = cmd.getGuestOSType();
+        String platformEmulator = cmd.getPlatformEmulator();
 
         boolean snapshotMemory = cmd.getTarget().getType() == VMSnapshot.Type.DiskAndMemory;
         long timeout = cmd.getWait();
@@ -6471,7 +6476,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
                     vm = getVM(conn, vmName);
                 } catch (Exception e) {
                     if (!snapshotMemory) {
-                        vm = createWorkingVM(conn, vmName, guestOSType, listVolumeTo);
+                        vm = createWorkingVM(conn, vmName, guestOSType, platformEmulator, listVolumeTo);
                     }
                 }
 
@@ -6559,9 +6564,11 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
         }
     }
 
-    private VM createWorkingVM(Connection conn, String vmName, String guestOSType, List<VolumeObjectTO> listVolumeTo) throws BadServerResponse, Types.VmBadPowerState, Types.SrFull,
+    private VM createWorkingVM(Connection conn, String vmName, String guestOSType, String platformEmulator, List<VolumeObjectTO> listVolumeTo) throws BadServerResponse,
+            Types.VmBadPowerState, Types.SrFull,
     Types.OperationNotAllowed, XenAPIException, XmlRpcException {
-        String guestOsTypeName = getGuestOsType(guestOSType, false);
+        //below is redundant but keeping for consistency and code readabilty
+        String guestOsTypeName = platformEmulator;
         if (guestOsTypeName == null) {
             String msg =
                     " Hypervisor " + this.getClass().getName() + " doesn't support guest OS type " + guestOSType + ". you can choose 'Other install media' to run it as HVM";
@@ -7145,7 +7152,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
     }
 
     /*Override by subclass*/
-    protected String getGuestOsType(String stdType, boolean bootFromCD) {
+    protected String getGuestOsType(String stdType, String platformEmulator, boolean bootFromCD) {
         return stdType;
     }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1fb358d0/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XcpOssResource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XcpOssResource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XcpOssResource.java
index 4a69d3a..cd59ae0 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XcpOssResource.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XcpOssResource.java
@@ -27,6 +27,15 @@ import javax.ejb.Local;
 import org.apache.log4j.Logger;
 import org.apache.xmlrpc.XmlRpcException;
 
+import com.xensource.xenapi.Connection;
+import com.xensource.xenapi.Host;
+import com.xensource.xenapi.SR;
+import com.xensource.xenapi.Types;
+import com.xensource.xenapi.Types.XenAPIException;
+import com.xensource.xenapi.VBD;
+import com.xensource.xenapi.VDI;
+import com.xensource.xenapi.VM;
+
 import com.cloud.agent.api.Answer;
 import com.cloud.agent.api.Command;
 import com.cloud.agent.api.NetworkUsageAnswer;
@@ -40,14 +49,6 @@ import com.cloud.resource.ServerResource;
 import com.cloud.storage.Storage;
 import com.cloud.utils.exception.CloudRuntimeException;
 import com.cloud.utils.script.Script;
-import com.xensource.xenapi.Connection;
-import com.xensource.xenapi.Host;
-import com.xensource.xenapi.SR;
-import com.xensource.xenapi.Types;
-import com.xensource.xenapi.Types.XenAPIException;
-import com.xensource.xenapi.VBD;
-import com.xensource.xenapi.VDI;
-import com.xensource.xenapi.VM;
 
 @Local(value = ServerResource.class)
 public class XcpOssResource extends CitrixResourceBase {
@@ -78,6 +79,7 @@ public class XcpOssResource extends CitrixResourceBase {
         return true;
     }
 
+    @Override
     protected StartupStorageCommand initializeLocalSR(Connection conn) {
         SR extsr = getLocalEXTSR(conn);
         if (extsr != null) {
@@ -111,13 +113,17 @@ public class XcpOssResource extends CitrixResourceBase {
     }
 
     @Override
-    protected String getGuestOsType(String stdType, boolean bootFromCD) {
+    protected String getGuestOsType(String stdType, String platformEmulator, boolean bootFromCD) {
         if (stdType.equalsIgnoreCase("Debian GNU/Linux 6(64-bit)")) {
             return "Debian Squeeze 6.0 (64-bit)";
         } else if (stdType.equalsIgnoreCase("CentOS 5.6 (64-bit)")) {
             return "CentOS 5 (64-bit)";
         } else {
-            return CitrixHelper.getXcpGuestOsType(stdType);
+            if (platformEmulator == null || platformEmulator.isEmpty()) {
+                s_logger.debug("Can't find the guest os: " + stdType + " mapping into XCP's guestOS type, start it as HVM guest");
+                platformEmulator = "Other install media";
+            }
+            return platformEmulator;
         }
     }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1fb358d0/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XcpServer16Resource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XcpServer16Resource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XcpServer16Resource.java
index 8cb7997..ff71ade 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XcpServer16Resource.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XcpServer16Resource.java
@@ -19,14 +19,20 @@
 
 package com.cloud.hypervisor.xen.resource;
 
-public class XcpServer16Resource extends XcpServerResource {
+import org.apache.log4j.Logger;
 
+public class XcpServer16Resource extends XcpServerResource {
+    private final static Logger s_logger = Logger.getLogger(XcpServer16Resource.class);
     public XcpServer16Resource() {
         super();
     }
 
     @Override
-    protected String getGuestOsType(String stdType, boolean bootFromCD) {
-        return CitrixHelper.getXcp160GuestOsType(stdType);
+    protected String getGuestOsType(String stdType, String platformEmulator, boolean bootFromCD) {
+        if (platformEmulator == null) {
+            s_logger.debug("Can't find the guest os: " + stdType + " mapping into XCP's guestOS type, start it as HVM guest");
+            platformEmulator = "Other install media";
+        }
+        return platformEmulator;
     }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1fb358d0/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XcpServerResource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XcpServerResource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XcpServerResource.java
index cc623bf..026f609 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XcpServerResource.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XcpServerResource.java
@@ -71,8 +71,12 @@ public class XcpServerResource extends CitrixResourceBase {
     }
 
     @Override
-    protected String getGuestOsType(String stdType, boolean bootFromCD) {
-        return CitrixHelper.getXcpGuestOsType(stdType);
+    protected String getGuestOsType(String stdType, String platformEmulator, boolean bootFromCD) {
+        if (platformEmulator == null) {
+            s_logger.debug("Can't find the guest os: " + stdType + " mapping into XCP's guestOS type, start it as HVM guest");
+            platformEmulator = "Other install media";
+        }
+        return platformEmulator;
     }
 
     protected NetworkUsageAnswer execute(NetworkUsageCommand cmd) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1fb358d0/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56FP1Resource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56FP1Resource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56FP1Resource.java
index 3dc527e..b792fa4 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56FP1Resource.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56FP1Resource.java
@@ -52,8 +52,17 @@ public class XenServer56FP1Resource extends XenServer56Resource {
     }
 
     @Override
-    protected String getGuestOsType(String stdType, boolean bootFromCD) {
-        return CitrixHelper.getXenServer56FP1GuestOsType(stdType, bootFromCD);
+    protected String getGuestOsType(String stdType, String platformEmulator, boolean bootFromCD) {
+        if (platformEmulator == null) {
+            if (!bootFromCD) {
+                s_logger.debug("Can't find the guest os: " + stdType + " mapping into XenServer 5.6 FP1 guestOS type, start it as HVM guest");
+                platformEmulator = "Other install media";
+            } else {
+                String msg = "XenServer 5.6 FP1 DOES NOT support Guest OS type " + stdType;
+                s_logger.warn(msg);
+            }
+        }
+        return platformEmulator;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1fb358d0/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56Resource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56Resource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56Resource.java
index a78ed81..1bdcc3d 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56Resource.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56Resource.java
@@ -16,6 +16,25 @@
 // under the License.
 package com.cloud.hypervisor.xen.resource;
 
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+import javax.ejb.Local;
+
+import org.apache.log4j.Logger;
+import org.apache.xmlrpc.XmlRpcException;
+
+import com.xensource.xenapi.Connection;
+import com.xensource.xenapi.Host;
+import com.xensource.xenapi.Network;
+import com.xensource.xenapi.PIF;
+import com.xensource.xenapi.Types.IpConfigurationMode;
+import com.xensource.xenapi.Types.XenAPIException;
+import com.xensource.xenapi.VLAN;
+import com.xensource.xenapi.VM;
+
 import com.cloud.agent.api.Answer;
 import com.cloud.agent.api.CheckOnHostAnswer;
 import com.cloud.agent.api.CheckOnHostCommand;
@@ -29,22 +48,6 @@ import com.cloud.resource.ServerResource;
 import com.cloud.utils.exception.CloudRuntimeException;
 import com.cloud.utils.script.Script;
 import com.cloud.utils.ssh.SSHCmdHelper;
-import com.xensource.xenapi.Connection;
-import com.xensource.xenapi.Host;
-import com.xensource.xenapi.Network;
-import com.xensource.xenapi.PIF;
-import com.xensource.xenapi.Types.IpConfigurationMode;
-import com.xensource.xenapi.Types.XenAPIException;
-import com.xensource.xenapi.VLAN;
-import com.xensource.xenapi.VM;
-import org.apache.log4j.Logger;
-import org.apache.xmlrpc.XmlRpcException;
-
-import javax.ejb.Local;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
 
 @Local(value = ServerResource.class)
 public class XenServer56Resource extends CitrixResourceBase {
@@ -62,8 +65,17 @@ public class XenServer56Resource extends CitrixResourceBase {
     }
 
     @Override
-    protected String getGuestOsType(String stdType, boolean bootFromCD) {
-        return CitrixHelper.getXenServerGuestOsType(stdType, bootFromCD);
+    protected String getGuestOsType(String stdType, String platformEmulator, boolean bootFromCD) {
+        if (platformEmulator == null) {
+            if (!bootFromCD) {
+                s_logger.debug("Can't find the guest os: " + stdType + " mapping into XenServer 5.6 guestOS type, start it as HVM guest");
+                platformEmulator = "Other install media";
+            } else {
+                String msg = "XenServer 5.6 doesn't support Guest OS type " + stdType;
+                s_logger.warn(msg);
+            }
+        }
+        return platformEmulator;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1fb358d0/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56SP2Resource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56SP2Resource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56SP2Resource.java
index 9e7d5dd..becb42d 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56SP2Resource.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56SP2Resource.java
@@ -39,8 +39,17 @@ public class XenServer56SP2Resource extends XenServer56FP1Resource {
     }
 
     @Override
-    protected String getGuestOsType(String stdType, boolean bootFromCD) {
-        return CitrixHelper.getXenServer56SP2GuestOsType(stdType, bootFromCD);
+    protected String getGuestOsType(String stdType, String platformEmulator, boolean bootFromCD) {
+        if (platformEmulator == null) {
+            if (!bootFromCD) {
+                s_logger.debug("Can't find the guest os: " + stdType + " mapping into XenServer 5.6 SP2 guestOS type, start it as HVM guest");
+                platformEmulator = "Other install media";
+            } else {
+                String msg = "XenServer 5.6 SP2 DOES NOT support Guest OS type " + stdType;
+                s_logger.warn(msg);
+            }
+        }
+        return platformEmulator;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1fb358d0/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer600Resource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer600Resource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer600Resource.java
index 021b9cb..ac03d5d 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer600Resource.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer600Resource.java
@@ -37,8 +37,18 @@ public class XenServer600Resource extends XenServer56SP2Resource {
     }
 
     @Override
-    protected String getGuestOsType(String stdType, boolean bootFromCD) {
-        return CitrixHelper.getXenServer600GuestOsType(stdType, bootFromCD);
+    protected String getGuestOsType(String stdType, String platformEmulator, boolean bootFromCD) {
+        if (platformEmulator == null) {
+            if (!bootFromCD) {
+                s_logger.debug("Can't find the guest os: " + stdType + " mapping into XenServer 6.0.2 guestOS type, start it as HVM guest");
+                platformEmulator = "Other install media";
+            } else {
+                String msg = "XenServer 6.0.2 DOES NOT support Guest OS type " + stdType;
+                s_logger.warn(msg);
+            }
+
+        }
+        return platformEmulator;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1fb358d0/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer602Resource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer602Resource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer602Resource.java
index 5c9bfbb..783cd44 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer602Resource.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer602Resource.java
@@ -16,7 +16,9 @@
 // under the License.
 package com.cloud.hypervisor.xen.resource;
 import javax.ejb.Local;
+
 import org.apache.log4j.Logger;
+
 import com.cloud.resource.ServerResource;
 
 @Local(value = ServerResource.class)
@@ -28,8 +30,17 @@ public class XenServer602Resource extends XenServer600Resource {
     }
 
     @Override
-    protected String getGuestOsType(String stdType, boolean bootFromCD) {
-        return CitrixHelper.getXenServer602GuestOsType(stdType, bootFromCD);
+    protected String getGuestOsType(String stdType, String platformEmulator, boolean bootFromCD) {
+        if (platformEmulator == null) {
+            if (!bootFromCD) {
+                s_logger.debug("Can't find the guest os: " + stdType + " mapping into XenServer 6.0.2 guestOS type, start it as HVM guest");
+                platformEmulator = "Other install media";
+            } else {
+                String msg = "XenServer 6.0.2 DOES NOT support Guest OS type " + stdType;
+                s_logger.warn(msg);
+            }
+        }
+        return platformEmulator;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1fb358d0/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer610Resource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer610Resource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer610Resource.java
index 0c3e1e9..6597cef 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer610Resource.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer610Resource.java
@@ -73,8 +73,17 @@ public class XenServer610Resource extends XenServer602Resource {
     }
 
     @Override
-    protected String getGuestOsType(String stdType, boolean bootFromCD) {
-        return CitrixHelper.getXenServer610GuestOsType(stdType, bootFromCD);
+    protected String getGuestOsType(String stdType, String platformEmulator, boolean bootFromCD) {
+        if (platformEmulator == null) {
+            if (!bootFromCD) {
+                s_logger.debug("Can't find the guest os: " + stdType + " mapping into XenServer 6.1.0 guestOS type, start it as HVM guest");
+                platformEmulator = "Other install media";
+            } else {
+                String msg = "XenServer 6.1.0 DOES NOT support Guest OS type " + stdType;
+                s_logger.warn(msg);
+            }
+        }
+        return platformEmulator;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1fb358d0/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer620Resource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer620Resource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer620Resource.java
index c10dc1e..44d880b 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer620Resource.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer620Resource.java
@@ -15,16 +15,20 @@
 // specific language governing permissions and limitations
 // under the License.
 package com.cloud.hypervisor.xen.resource;
+import java.util.Map;
+import java.util.Set;
+
+import javax.ejb.Local;
+
+import org.apache.log4j.Logger;
+
 import com.xensource.xenapi.Connection;
 import com.xensource.xenapi.Host;
 import com.xensource.xenapi.HostPatch;
 import com.xensource.xenapi.PoolPatch;
 
 import org.apache.cloudstack.hypervisor.xenserver.XenserverConfigs;
-import java.util.Map;
-import java.util.Set;
-import javax.ejb.Local;
-import org.apache.log4j.Logger;
+
 import com.cloud.agent.api.StartupRoutingCommand;
 import com.cloud.resource.ServerResource;
 
@@ -37,8 +41,17 @@ public class XenServer620Resource extends XenServer610Resource {
     }
 
     @Override
-    protected String getGuestOsType(String stdType, boolean bootFromCD) {
-        return CitrixHelper.getXenServer620GuestOsType(stdType, bootFromCD);
+    protected String getGuestOsType(String stdType, String platformEmulator, boolean bootFromCD) {
+        if (platformEmulator == null) {
+            if (!bootFromCD) {
+                s_logger.debug("Can't find the guest os: " + stdType + " mapping into XenServer 6.2.0 guestOS type, start it as HVM guest");
+                platformEmulator = "Other install media";
+            } else {
+                String msg = "XenServer 6.2.0 DOES NOT support Guest OS type " + stdType;
+                s_logger.warn(msg);
+            }
+        }
+        return platformEmulator;
     }
 
     @Override
@@ -89,6 +102,7 @@ public class XenServer620Resource extends XenServer610Resource {
         return false;
     }
 
+    @Override
     protected void fillHostInfo(Connection conn, StartupRoutingCommand cmd) {
         super.fillHostInfo(conn, cmd);
         Map<String, String> details = cmd.getHostDetails();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1fb358d0/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer620SP1Resource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer620SP1Resource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer620SP1Resource.java
index 4f04961..fbeed96 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer620SP1Resource.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer620SP1Resource.java
@@ -28,15 +28,6 @@ import javax.ejb.Local;
 import org.apache.log4j.Logger;
 import org.apache.xmlrpc.XmlRpcException;
 
-import com.cloud.agent.api.Answer;
-import com.cloud.agent.api.Command;
-import com.cloud.agent.api.GetGPUStatsAnswer;
-import com.cloud.agent.api.GetGPUStatsCommand;
-import com.cloud.agent.api.StartCommand;
-import com.cloud.agent.api.StartupRoutingCommand;
-import com.cloud.agent.api.VgpuTypesInfo;
-import com.cloud.agent.api.to.GPUDeviceTO;
-import com.cloud.resource.ServerResource;
 import com.xensource.xenapi.Connection;
 import com.xensource.xenapi.GPUGroup;
 import com.xensource.xenapi.Host;
@@ -47,6 +38,16 @@ import com.xensource.xenapi.VGPUType;
 import com.xensource.xenapi.VGPUType.Record;
 import com.xensource.xenapi.VM;
 
+import com.cloud.agent.api.Answer;
+import com.cloud.agent.api.Command;
+import com.cloud.agent.api.GetGPUStatsAnswer;
+import com.cloud.agent.api.GetGPUStatsCommand;
+import com.cloud.agent.api.StartCommand;
+import com.cloud.agent.api.StartupRoutingCommand;
+import com.cloud.agent.api.VgpuTypesInfo;
+import com.cloud.agent.api.to.GPUDeviceTO;
+import com.cloud.resource.ServerResource;
+
 @Local(value=ServerResource.class)
 public class XenServer620SP1Resource extends XenServer620Resource {
     private static final Logger s_logger = Logger.getLogger(XenServer620SP1Resource.class);
@@ -159,8 +160,17 @@ public class XenServer620SP1Resource extends XenServer620Resource {
     }
 
     @Override
-    protected String getGuestOsType(String stdType, boolean bootFromCD) {
-        return CitrixHelper.getXenServer620SP1GuestOsType(stdType, bootFromCD);
+    protected String getGuestOsType(String stdType, String platformEmulator, boolean bootFromCD) {
+        if (platformEmulator == null) {
+            if (!bootFromCD) {
+                s_logger.debug("Can't find the guest os: " + stdType + " mapping into XenServer 6.2.0 guestOS type, start it as HVM guest");
+                platformEmulator = "Other install media";
+            } else {
+                String msg = "XenServer 6.2.0 DOES NOT support Guest OS type " + stdType;
+                s_logger.warn(msg);
+            }
+        }
+        return platformEmulator;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1fb358d0/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/Xenserver625Resource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/Xenserver625Resource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/Xenserver625Resource.java
index 76d502a..bc69fd8 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/Xenserver625Resource.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/Xenserver625Resource.java
@@ -50,8 +50,17 @@ public class Xenserver625Resource extends XenServerResourceNewBase {
     }
 
     @Override
-    protected String getGuestOsType(String stdType, boolean bootFromCD) {
-        return CitrixHelper.getXenServer625GuestOsType(stdType, bootFromCD);
+    protected String getGuestOsType(String stdType, String platformEmulator, boolean bootFromCD) {
+        if (platformEmulator == null) {
+            if (!bootFromCD) {
+                s_logger.debug("Can't find the guest os: " + stdType + " mapping into XenServer 6.2.5 guestOS type, start it as HVM guest");
+                platformEmulator = "Other install media";
+            } else {
+                String msg = "XenServer 6.2.5 DOES NOT support Guest OS type " + stdType;
+                s_logger.warn(msg);
+            }
+        }
+        return platformEmulator;
     }
 
     @Override


Re: [2/2] git commit: updated refs/heads/4.4 to 02bd3d0

Posted by Milamber <mi...@gmail.com>.
Le 16/05/2014 18:59, Daan Hoogland a ecrit :
> adding Milamber back in the addresslist.
>
> On Fri, May 16, 2014 at 7:43 PM, Amogh Vasekar <am...@citrix.com> wrote:
>> Hi,
>>
>> Can you please let me know the guest OS name for the ISO you are using?
>> May be one of the mappings is missing from DB, since Cent-os seems to be
>> working.


The guest OS is Debian 7.5 64 bits (netinstall) (which is in the list of 
os type as Debian 7)


>>
>> Thanks,
>> Amogh
>>
>> On 5/16/14 8:46 AM, "Daan Hoogland" <da...@gmail.com> wrote:
>>
>>> Nitin, Amogh,
>>>
>>> Can you have a quick look? please advice if I should revert or add a
>>> missing commit.
>>>
>>> regards,
>>> Daan
>>>
>>> On Fri, May 16, 2014 at 12:55 PM, Milamber <mi...@apache.org> wrote:
>>>> Hello,
>>>>
>>>> This commit creating an NPE issue when you add a new kvm instance from
>>>> ISO.
>>>>
>>>> See: https://issues.apache.org/jira/browse/CLOUDSTACK-6671
>>>>
>>>> Milamber
>>>>
>>>>
>>>> Le 13/05/2014 09:33, dahn@apache.org a ecrit :
>>>>
>>>>> CLOUDSTACK-6358: As a part of supporting dynamic guest OS defined by
>>>>> user,
>>>>> removing the hard-coded dependencies.
>>>>> This patch is for KVM
>>>>>
>>>>> 1. Local testing on KVM
>>>>> 2. Successfully got up system VMs
>>>>> 3. Successfully created a CentOS VM
>>>>> 4. Snapshots are not supported for KVM
>>>>>
>>>>>    Signed off by :- Nitin Mehta<ni...@citrix.com>
>>>>>
>>>>>
>>>>> Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
>>>>> Commit:
>>>>> http://git-wip-us.apache.org/repos/asf/cloudstack/commit/02bd3d06
>>>>> Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/02bd3d06
>>>>> Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/02bd3d06
>>>>>
>>>>> Branch: refs/heads/4.4
>>>>> Commit: 02bd3d0671b0cde46f8aa7892f20aa0bb0d48d1c
>>>>> Parents: 1fb358d
>>>>> Author: Amogh Vasekar <am...@citrix.com>
>>>>> Authored: Wed May 7 15:16:55 2014 -0700
>>>>> Committer: Daan Hoogland <da...@onecht.net>
>>>>> Committed: Tue May 13 10:33:15 2014 +0200
>>>>>
>>>>> ----------------------------------------------------------------------
>>>>>    .../storage/dao/GuestOSHypervisorDaoImpl.java   |   6 +-
>>>>>    .../kvm/resource/LibvirtComputingResource.java  | 156
>>>>> ++++++++++---------
>>>>>    .../hypervisor/kvm/resource/LibvirtVMDef.java   |   9 ++
>>>>>    .../hypervisor/kvm/resource/VifDriverBase.java  |   4 +-
>>>>>    server/src/com/cloud/hypervisor/KVMGuru.java    |  14 +-
>>>>>    5 files changed, 108 insertions(+), 81 deletions(-)
>>>>> ----------------------------------------------------------------------
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/engine/s
>>>>> chema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
>>>>> ----------------------------------------------------------------------
>>>>> diff --git
>>>>> a/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
>>>>> b/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
>>>>> index 3b05120..b06cdfa 100644
>>>>> ---
>>>>> a/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
>>>>> +++
>>>>> b/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
>>>>> @@ -58,9 +58,13 @@ public class GuestOSHypervisorDaoImpl extends
>>>>> GenericDaoBase<GuestOSHypervisorVO
>>>>>        @Override
>>>>>        public GuestOSHypervisorVO findByOsIdAndHypervisor(long
>>>>> guestOsId,
>>>>> String hypervisorType, String hypervisorVersion) {
>>>>>            SearchCriteria<GuestOSHypervisorVO> sc =
>>>>> mappingSearch.create();
>>>>> +        String version = "default";
>>>>> +        if (!(hypervisorVersion == null ||
>>>>> hypervisorVersion.isEmpty()))
>>>>> {
>>>>> +            version = hypervisorVersion;
>>>>> +        }
>>>>>            sc.setParameters("guest_os_id", guestOsId);
>>>>>            sc.setParameters("hypervisor_type", hypervisorType);
>>>>> -        sc.setParameters("hypervisor_version", hypervisorVersion);
>>>>> +        sc.setParameters("hypervisor_version", version);
>>>>>            return findOneBy(sc);
>>>>>        }
>>>>>
>>>>>
>>>>>
>>>>> http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/plugins/
>>>>> hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingRe
>>>>> source.java
>>>>> ----------------------------------------------------------------------
>>>>> diff --git
>>>>>
>>>>> a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtC
>>>>> omputingResource.java
>>>>>
>>>>> b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtC
>>>>> omputingResource.java
>>>>> index 345a8ee..b8f33e5 100755
>>>>> ---
>>>>>
>>>>> a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtC
>>>>> omputingResource.java
>>>>> +++
>>>>>
>>>>> b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtC
>>>>> omputingResource.java
>>>>> @@ -16,12 +16,79 @@
>>>>>    // under the License.
>>>>>    package com.cloud.hypervisor.kvm.resource;
>>>>>    +import java.io.BufferedOutputStream;
>>>>> +import java.io.BufferedReader;
>>>>> +import java.io.File;
>>>>> +import java.io.FileNotFoundException;
>>>>> +import java.io.FileOutputStream;
>>>>> +import java.io.FileReader;
>>>>> +import java.io.IOException;
>>>>> +import java.io.InputStream;
>>>>> +import java.io.InputStreamReader;
>>>>> +import java.io.Reader;
>>>>> +import java.net.InetAddress;
>>>>> +import java.net.URI;
>>>>> +import java.net.URISyntaxException;
>>>>> +import java.net.URL;
>>>>> +import java.net.URLConnection;
>>>>> +import java.text.DateFormat;
>>>>> +import java.text.MessageFormat;
>>>>> +import java.text.SimpleDateFormat;
>>>>> +import java.util.ArrayList;
>>>>> +import java.util.Arrays;
>>>>> +import java.util.Calendar;
>>>>> +import java.util.Collections;
>>>>> +import java.util.Comparator;
>>>>> +import java.util.Date;
>>>>> +import java.util.HashMap;
>>>>> +import java.util.HashSet;
>>>>> +import java.util.List;
>>>>> +import java.util.Map;
>>>>> +import java.util.Properties;
>>>>> +import java.util.Set;
>>>>> +import java.util.UUID;
>>>>> +import java.util.concurrent.Callable;
>>>>> +import java.util.concurrent.ConcurrentHashMap;
>>>>> +import java.util.concurrent.ExecutionException;
>>>>> +import java.util.concurrent.ExecutorService;
>>>>> +import java.util.concurrent.Executors;
>>>>> +import java.util.concurrent.Future;
>>>>> +import java.util.concurrent.TimeUnit;
>>>>> +import java.util.concurrent.TimeoutException;
>>>>> +import java.util.regex.Matcher;
>>>>> +import java.util.regex.Pattern;
>>>>> +
>>>>> +import javax.ejb.Local;
>>>>> +import javax.naming.ConfigurationException;
>>>>> +
>>>>> +import org.apache.commons.io.FileUtils;
>>>>> +import org.apache.commons.io.IOUtils;
>>>>> +import org.apache.log4j.Logger;
>>>>> +import org.libvirt.Connect;
>>>>> +import org.libvirt.Domain;
>>>>> +import org.libvirt.DomainBlockStats;
>>>>> +import org.libvirt.DomainInfo;
>>>>> +import org.libvirt.DomainInterfaceStats;
>>>>> +import org.libvirt.DomainSnapshot;
>>>>> +import org.libvirt.LibvirtException;
>>>>> +import org.libvirt.NodeInfo;
>>>>> +import org.libvirt.StorageVol;
>>>>> +
>>>>>    import com.ceph.rados.IoCTX;
>>>>>    import com.ceph.rados.Rados;
>>>>>    import com.ceph.rados.RadosException;
>>>>>    import com.ceph.rbd.Rbd;
>>>>>    import com.ceph.rbd.RbdException;
>>>>>    import com.ceph.rbd.RbdImage;
>>>>> +
>>>>> +import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
>>>>> +import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
>>>>> +import org.apache.cloudstack.storage.to.VolumeObjectTO;
>>>>> +import org.apache.cloudstack.utils.qemu.QemuImg;
>>>>> +import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat;
>>>>> +import org.apache.cloudstack.utils.qemu.QemuImgException;
>>>>> +import org.apache.cloudstack.utils.qemu.QemuImgFile;
>>>>> +
>>>>>    import com.cloud.agent.api.Answer;
>>>>>    import com.cloud.agent.api.AttachIsoCommand;
>>>>>    import com.cloud.agent.api.AttachVolumeAnswer;
>>>>> @@ -202,71 +269,6 @@ import com.cloud.vm.VirtualMachine;
>>>>>    import com.cloud.vm.VirtualMachine.PowerState;
>>>>>    import com.cloud.vm.VirtualMachine.State;
>>>>>    -import
>>>>> org.apache.cloudstack.storage.command.StorageSubSystemCommand;
>>>>> -import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
>>>>> -import org.apache.cloudstack.storage.to.VolumeObjectTO;
>>>>> -import org.apache.cloudstack.utils.qemu.QemuImg;
>>>>> -import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat;
>>>>> -import org.apache.cloudstack.utils.qemu.QemuImgException;
>>>>> -import org.apache.cloudstack.utils.qemu.QemuImgFile;
>>>>> -import org.apache.commons.io.FileUtils;
>>>>> -import org.apache.commons.io.IOUtils;
>>>>> -import org.apache.log4j.Logger;
>>>>> -import org.libvirt.Connect;
>>>>> -import org.libvirt.Domain;
>>>>> -import org.libvirt.DomainBlockStats;
>>>>> -import org.libvirt.DomainInfo;
>>>>> -import org.libvirt.DomainInterfaceStats;
>>>>> -import org.libvirt.DomainSnapshot;
>>>>> -import org.libvirt.LibvirtException;
>>>>> -import org.libvirt.NodeInfo;
>>>>> -import org.libvirt.StorageVol;
>>>>> -
>>>>> -import javax.ejb.Local;
>>>>> -import javax.naming.ConfigurationException;
>>>>> -
>>>>> -import java.io.BufferedOutputStream;
>>>>> -import java.io.BufferedReader;
>>>>> -import java.io.File;
>>>>> -import java.io.FileNotFoundException;
>>>>> -import java.io.FileOutputStream;
>>>>> -import java.io.FileReader;
>>>>> -import java.io.IOException;
>>>>> -import java.io.InputStream;
>>>>> -import java.io.InputStreamReader;
>>>>> -import java.io.Reader;
>>>>> -import java.net.InetAddress;
>>>>> -import java.net.URI;
>>>>> -import java.net.URISyntaxException;
>>>>> -import java.net.URL;
>>>>> -import java.net.URLConnection;
>>>>> -import java.text.DateFormat;
>>>>> -import java.text.MessageFormat;
>>>>> -import java.text.SimpleDateFormat;
>>>>> -import java.util.ArrayList;
>>>>> -import java.util.Arrays;
>>>>> -import java.util.Calendar;
>>>>> -import java.util.Collections;
>>>>> -import java.util.Comparator;
>>>>> -import java.util.Date;
>>>>> -import java.util.HashMap;
>>>>> -import java.util.HashSet;
>>>>> -import java.util.List;
>>>>> -import java.util.Map;
>>>>> -import java.util.Properties;
>>>>> -import java.util.Set;
>>>>> -import java.util.UUID;
>>>>> -import java.util.concurrent.Callable;
>>>>> -import java.util.concurrent.ConcurrentHashMap;
>>>>> -import java.util.concurrent.ExecutionException;
>>>>> -import java.util.concurrent.ExecutorService;
>>>>> -import java.util.concurrent.Executors;
>>>>> -import java.util.concurrent.Future;
>>>>> -import java.util.concurrent.TimeoutException;
>>>>> -import java.util.concurrent.TimeUnit;
>>>>> -import java.util.regex.Matcher;
>>>>> -import java.util.regex.Pattern;
>>>>> -
>>>>>    /**
>>>>>     * LibvirtComputingResource execute requests on the computing/routing
>>>>> host using
>>>>>     * the libvirt API
>>>>> @@ -2006,7 +2008,7 @@ public class LibvirtComputingResource extends
>>>>> ServerResourceBase implements Serv
>>>>>            }
>>>>>              Domain vm = getDomain(conn, vmName);
>>>>> -        vm.attachDevice(getVifDriver(nicTO.getType()).plug(nicTO,
>>>>> "Other
>>>>> PV (32-bit)").toString());
>>>>> +        vm.attachDevice(getVifDriver(nicTO.getType()).plug(nicTO,
>>>>> "Other
>>>>> PV").toString());
>>>>>        }
>>>>>      @@ -2043,7 +2045,7 @@ public class LibvirtComputingResource extends
>>>>> ServerResourceBase implements Serv
>>>>>                    }
>>>>>                    nicnum++;
>>>>>                }
>>>>> -            vm.attachDevice(getVifDriver(nic.getType()).plug(nic,
>>>>> "Other
>>>>> PV (32-bit)").toString());
>>>>> +            vm.attachDevice(getVifDriver(nic.getType()).plug(nic,
>>>>> "Other
>>>>> PV").toString());
>>>>>                return new PlugNicAnswer(cmd, true, "success");
>>>>>            } catch (LibvirtException e) {
>>>>>                String msg = " Plug Nic failed due to " + e.toString();
>>>>> @@ -3641,6 +3643,7 @@ public class LibvirtComputingResource extends
>>>>> ServerResourceBase implements Serv
>>>>>            uuid = getUuid(uuid);
>>>>>            vm.setDomUUID(uuid);
>>>>>            vm.setDomDescription(vmTO.getOs());
>>>>> +        vm.setPlatformEmulator(vmTO.getPlatformEmulator());
>>>>>              GuestDef guest = new GuestDef();
>>>>>    @@ -3924,7 +3927,7 @@ public class LibvirtComputingResource extends
>>>>> ServerResourceBase implements Serv
>>>>>                    volPath = physicalDisk.getPath();
>>>>>                }
>>>>>    -            DiskDef.diskBus diskBusType =
>>>>> getGuestDiskModel(vmSpec.getOs());
>>>>> +            DiskDef.diskBus diskBusType =
>>>>> getGuestDiskModel(vmSpec.getPlatformEmulator());
>>>>>                DiskDef disk = new DiskDef();
>>>>>                if (volume.getType() == Volume.Type.ISO) {
>>>>>                    if (volPath == null) {
>>>>> @@ -4004,7 +4007,7 @@ public class LibvirtComputingResource extends
>>>>> ServerResourceBase implements Serv
>>>>>        }
>>>>>          private void createVif(LibvirtVMDef vm, NicTO nic) throws
>>>>> InternalErrorException, LibvirtException {
>>>>> -
>>>>> vm.getDevices().addDevice(getVifDriver(nic.getType()).plug(nic,
>>>>> vm.getGuestOSType()).toString());
>>>>> +
>>>>> vm.getDevices().addDevice(getVifDriver(nic.getType()).plug(nic,
>>>>> vm.getPlatformEmulator()).toString());
>>>>>        }
>>>>>          protected CheckSshAnswer execute(CheckSshCommand cmd) {
>>>>> @@ -4938,16 +4941,15 @@ public class LibvirtComputingResource extends
>>>>> ServerResourceBase implements Serv
>>>>>            }
>>>>>        }
>>>>>    -    boolean isGuestPVEnabled(String guestOS) {
>>>>> -        if (guestOS == null) {
>>>>> +    boolean isGuestPVEnabled(String guestOSName) {
>>>>> +        if (guestOSName == null) {
>>>>>                return false;
>>>>>            }
>>>>> -        String guestOSName = KVMGuestOsMapper.getGuestOsName(guestOS);
>>>>> -        if (guestOS.startsWith("Ubuntu") ||
>>>>> guestOSName.startsWith("Fedora 13") || guestOSName.startsWith("Fedora
>>>>> 12")
>>>>> || guestOSName.startsWith("Fedora 11") ||
>>>>> +        if (guestOSName.startsWith("Ubuntu") ||
>>>>> guestOSName.startsWith("Fedora 13") || guestOSName.startsWith("Fedora
>>>>> 12")
>>>>> || guestOSName.startsWith("Fedora 11") ||
>>>>>                    guestOSName.startsWith("Fedora 10") ||
>>>>> guestOSName.startsWith("Fedora 9") || guestOSName.startsWith("CentOS
>>>>> 5.3")
>>>>> || guestOSName.startsWith("CentOS 5.4") ||
>>>>> -                guestOSName.startsWith("CentOS 5.5") ||
>>>>> guestOS.startsWith("CentOS") || guestOS.startsWith("Fedora") ||
>>>>> +                guestOSName.startsWith("CentOS 5.5") ||
>>>>> guestOSName.startsWith("CentOS") || guestOSName.startsWith("Fedora") ||
>>>>>                    guestOSName.startsWith("Red Hat Enterprise Linux
>>>>> 5.3")
>>>>> || guestOSName.startsWith("Red Hat Enterprise Linux 5.4") ||
>>>>> -                guestOSName.startsWith("Red Hat Enterprise Linux
>>>>> 5.5") ||
>>>>> guestOSName.startsWith("Red Hat Enterprise Linux 6") ||
>>>>> guestOS.startsWith("Debian GNU/Linux") ||
>>>>> +                guestOSName.startsWith("Red Hat Enterprise Linux
>>>>> 5.5") ||
>>>>> guestOSName.startsWith("Red Hat Enterprise Linux 6") ||
>>>>> guestOSName.startsWith("Debian GNU/Linux") ||
>>>>>                    guestOSName.startsWith("FreeBSD 10") ||
>>>>> guestOSName.startsWith("Other PV")) {
>>>>>                return true;
>>>>>            } else {
>>>>> @@ -4963,8 +4965,8 @@ public class LibvirtComputingResource extends
>>>>> ServerResourceBase implements Serv
>>>>>            }
>>>>>        }
>>>>>    -    private DiskDef.diskBus getGuestDiskModel(String guestOSType) {
>>>>> -        if (isGuestPVEnabled(guestOSType)) {
>>>>> +    private DiskDef.diskBus getGuestDiskModel(String
>>>>> platformEmulator) {
>>>>> +        if (isGuestPVEnabled(platformEmulator)) {
>>>>>                return DiskDef.diskBus.VIRTIO;
>>>>>            } else {
>>>>>                return DiskDef.diskBus.IDE;
>>>>>
>>>>>
>>>>>
>>>>> http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/plugins/
>>>>> hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
>>>>> ----------------------------------------------------------------------
>>>>> diff --git
>>>>>
>>>>> a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtV
>>>>> MDef.java
>>>>>
>>>>> b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtV
>>>>> MDef.java
>>>>> index 4032305..f6c3edf 100644
>>>>> ---
>>>>>
>>>>> a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtV
>>>>> MDef.java
>>>>> +++
>>>>>
>>>>> b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtV
>>>>> MDef.java
>>>>> @@ -28,6 +28,7 @@ public class LibvirtVMDef {
>>>>>        private String _domName;
>>>>>        private String _domUUID;
>>>>>        private String _desc;
>>>>> +    private String _platformEmulator;
>>>>>        private final Map<String, Object> components = new
>>>>> HashMap<String,
>>>>> Object>();
>>>>>          public static class GuestDef {
>>>>> @@ -1179,6 +1180,14 @@ public class LibvirtVMDef {
>>>>>            return _desc;
>>>>>        }
>>>>>    +    public void setPlatformEmulator(String platformEmulator) {
>>>>> +        _platformEmulator = platformEmulator;
>>>>> +    }
>>>>> +
>>>>> +    public String getPlatformEmulator() {
>>>>> +        return _platformEmulator;
>>>>> +    }
>>>>> +
>>>>>        public void addComp(Object comp) {
>>>>>            components.put(comp.getClass().toString(), comp);
>>>>>        }
>>>>>
>>>>>
>>>>>
>>>>> http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/plugins/
>>>>> hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDriverBase.java
>>>>> ----------------------------------------------------------------------
>>>>> diff --git
>>>>>
>>>>> a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDrive
>>>>> rBase.java
>>>>>
>>>>> b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDrive
>>>>> rBase.java
>>>>> index d89d71a..53e81fd 100644
>>>>> ---
>>>>>
>>>>> a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDrive
>>>>> rBase.java
>>>>> +++
>>>>>
>>>>> b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDrive
>>>>> rBase.java
>>>>> @@ -47,8 +47,8 @@ public abstract class VifDriverBase implements
>>>>> VifDriver
>>>>> {
>>>>>        @Override
>>>>>        public abstract void unplug(LibvirtVMDef.InterfaceDef iface);
>>>>>    -    protected LibvirtVMDef.InterfaceDef.nicModel
>>>>> getGuestNicModel(String guestOSType) {
>>>>> -        if (_libvirtComputingResource.isGuestPVEnabled(guestOSType)) {
>>>>> +    protected LibvirtVMDef.InterfaceDef.nicModel
>>>>> getGuestNicModel(String
>>>>> platformEmulator) {
>>>>> +        if
>>>>> (_libvirtComputingResource.isGuestPVEnabled(platformEmulator))
>>>>> {
>>>>>                return LibvirtVMDef.InterfaceDef.nicModel.VIRTIO;
>>>>>            } else {
>>>>>                return LibvirtVMDef.InterfaceDef.nicModel.E1000;
>>>>>
>>>>>
>>>>>
>>>>> http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/server/s
>>>>> rc/com/cloud/hypervisor/KVMGuru.java
>>>>> ----------------------------------------------------------------------
>>>>> diff --git a/server/src/com/cloud/hypervisor/KVMGuru.java
>>>>> b/server/src/com/cloud/hypervisor/KVMGuru.java
>>>>> index 174b32d..4225232 100644
>>>>> --- a/server/src/com/cloud/hypervisor/KVMGuru.java
>>>>> +++ b/server/src/com/cloud/hypervisor/KVMGuru.java
>>>>> @@ -19,19 +19,28 @@ package com.cloud.hypervisor;
>>>>>    import javax.ejb.Local;
>>>>>    import javax.inject.Inject;
>>>>>    +import
>>>>> org.apache.cloudstack.storage.command.StorageSubSystemCommand;
>>>>> +
>>>>>    import com.cloud.agent.api.Command;
>>>>>    import com.cloud.agent.api.to.VirtualMachineTO;
>>>>> +import com.cloud.host.HostVO;
>>>>> +import com.cloud.host.dao.HostDao;
>>>>>    import com.cloud.hypervisor.Hypervisor.HypervisorType;
>>>>> +import com.cloud.storage.GuestOSHypervisorVO;
>>>>>    import com.cloud.storage.GuestOSVO;
>>>>>    import com.cloud.storage.dao.GuestOSDao;
>>>>> +import com.cloud.storage.dao.GuestOSHypervisorDao;
>>>>>    import com.cloud.utils.Pair;
>>>>>    import com.cloud.vm.VirtualMachineProfile;
>>>>> -import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
>>>>>      @Local(value = HypervisorGuru.class)
>>>>>    public class KVMGuru extends HypervisorGuruBase implements
>>>>> HypervisorGuru {
>>>>>        @Inject
>>>>>        GuestOSDao _guestOsDao;
>>>>> +    @Inject
>>>>> +    GuestOSHypervisorDao _guestOsHypervisorDao;
>>>>> +    @Inject
>>>>> +    HostDao _hostDao;
>>>>>          @Override
>>>>>        public HypervisorType getHypervisorType() {
>>>>> @@ -50,6 +59,9 @@ public class KVMGuru extends HypervisorGuruBase
>>>>> implements HypervisorGuru {
>>>>>            // Determine the VM's OS description
>>>>>            GuestOSVO guestOS =
>>>>> _guestOsDao.findById(vm.getVirtualMachine().getGuestOSId());
>>>>>            to.setOs(guestOS.getDisplayName());
>>>>> +        HostVO host =
>>>>> _hostDao.findById(vm.getVirtualMachine().getHostId());
>>>>> +        GuestOSHypervisorVO guestOsMapping =
>>>>> _guestOsHypervisorDao.findByOsIdAndHypervisor(guestOS.getId(),
>>>>> getHypervisorType().toString(), host.getHypervisorVersion());
>>>>> +        to.setPlatformEmulator(guestOsMapping.getGuestOsName());
>>>>>              return to;
>>>>>        }
>>>>>
>>>>>
>>>
>>>
>>> --
>>> Daan
>
>


Re: [2/2] git commit: updated refs/heads/4.4 to 02bd3d0

Posted by Daan Hoogland <da...@gmail.com>.
adding Milamber back in the addresslist.

On Fri, May 16, 2014 at 7:43 PM, Amogh Vasekar <am...@citrix.com> wrote:
> Hi,
>
> Can you please let me know the guest OS name for the ISO you are using?
> May be one of the mappings is missing from DB, since Cent-os seems to be
> working.
>
> Thanks,
> Amogh
>
> On 5/16/14 8:46 AM, "Daan Hoogland" <da...@gmail.com> wrote:
>
>>Nitin, Amogh,
>>
>>Can you have a quick look? please advice if I should revert or add a
>>missing commit.
>>
>>regards,
>>Daan
>>
>>On Fri, May 16, 2014 at 12:55 PM, Milamber <mi...@apache.org> wrote:
>>> Hello,
>>>
>>> This commit creating an NPE issue when you add a new kvm instance from
>>>ISO.
>>>
>>> See: https://issues.apache.org/jira/browse/CLOUDSTACK-6671
>>>
>>> Milamber
>>>
>>>
>>> Le 13/05/2014 09:33, dahn@apache.org a ecrit :
>>>
>>>> CLOUDSTACK-6358: As a part of supporting dynamic guest OS defined by
>>>>user,
>>>> removing the hard-coded dependencies.
>>>> This patch is for KVM
>>>>
>>>> 1. Local testing on KVM
>>>> 2. Successfully got up system VMs
>>>> 3. Successfully created a CentOS VM
>>>> 4. Snapshots are not supported for KVM
>>>>
>>>>   Signed off by :- Nitin Mehta<ni...@citrix.com>
>>>>
>>>>
>>>> Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
>>>> Commit:
>>>>http://git-wip-us.apache.org/repos/asf/cloudstack/commit/02bd3d06
>>>> Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/02bd3d06
>>>> Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/02bd3d06
>>>>
>>>> Branch: refs/heads/4.4
>>>> Commit: 02bd3d0671b0cde46f8aa7892f20aa0bb0d48d1c
>>>> Parents: 1fb358d
>>>> Author: Amogh Vasekar <am...@citrix.com>
>>>> Authored: Wed May 7 15:16:55 2014 -0700
>>>> Committer: Daan Hoogland <da...@onecht.net>
>>>> Committed: Tue May 13 10:33:15 2014 +0200
>>>>
>>>> ----------------------------------------------------------------------
>>>>   .../storage/dao/GuestOSHypervisorDaoImpl.java   |   6 +-
>>>>   .../kvm/resource/LibvirtComputingResource.java  | 156
>>>> ++++++++++---------
>>>>   .../hypervisor/kvm/resource/LibvirtVMDef.java   |   9 ++
>>>>   .../hypervisor/kvm/resource/VifDriverBase.java  |   4 +-
>>>>   server/src/com/cloud/hypervisor/KVMGuru.java    |  14 +-
>>>>   5 files changed, 108 insertions(+), 81 deletions(-)
>>>> ----------------------------------------------------------------------
>>>>
>>>>
>>>>
>>>>
>>>>http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/engine/s
>>>>chema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
>>>> ----------------------------------------------------------------------
>>>> diff --git
>>>> a/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
>>>> b/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
>>>> index 3b05120..b06cdfa 100644
>>>> ---
>>>> a/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
>>>> +++
>>>> b/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
>>>> @@ -58,9 +58,13 @@ public class GuestOSHypervisorDaoImpl extends
>>>> GenericDaoBase<GuestOSHypervisorVO
>>>>       @Override
>>>>       public GuestOSHypervisorVO findByOsIdAndHypervisor(long
>>>>guestOsId,
>>>> String hypervisorType, String hypervisorVersion) {
>>>>           SearchCriteria<GuestOSHypervisorVO> sc =
>>>>mappingSearch.create();
>>>> +        String version = "default";
>>>> +        if (!(hypervisorVersion == null ||
>>>>hypervisorVersion.isEmpty()))
>>>> {
>>>> +            version = hypervisorVersion;
>>>> +        }
>>>>           sc.setParameters("guest_os_id", guestOsId);
>>>>           sc.setParameters("hypervisor_type", hypervisorType);
>>>> -        sc.setParameters("hypervisor_version", hypervisorVersion);
>>>> +        sc.setParameters("hypervisor_version", version);
>>>>           return findOneBy(sc);
>>>>       }
>>>>
>>>>
>>>>
>>>>http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/plugins/
>>>>hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingRe
>>>>source.java
>>>> ----------------------------------------------------------------------
>>>> diff --git
>>>>
>>>>a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtC
>>>>omputingResource.java
>>>>
>>>>b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtC
>>>>omputingResource.java
>>>> index 345a8ee..b8f33e5 100755
>>>> ---
>>>>
>>>>a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtC
>>>>omputingResource.java
>>>> +++
>>>>
>>>>b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtC
>>>>omputingResource.java
>>>> @@ -16,12 +16,79 @@
>>>>   // under the License.
>>>>   package com.cloud.hypervisor.kvm.resource;
>>>>   +import java.io.BufferedOutputStream;
>>>> +import java.io.BufferedReader;
>>>> +import java.io.File;
>>>> +import java.io.FileNotFoundException;
>>>> +import java.io.FileOutputStream;
>>>> +import java.io.FileReader;
>>>> +import java.io.IOException;
>>>> +import java.io.InputStream;
>>>> +import java.io.InputStreamReader;
>>>> +import java.io.Reader;
>>>> +import java.net.InetAddress;
>>>> +import java.net.URI;
>>>> +import java.net.URISyntaxException;
>>>> +import java.net.URL;
>>>> +import java.net.URLConnection;
>>>> +import java.text.DateFormat;
>>>> +import java.text.MessageFormat;
>>>> +import java.text.SimpleDateFormat;
>>>> +import java.util.ArrayList;
>>>> +import java.util.Arrays;
>>>> +import java.util.Calendar;
>>>> +import java.util.Collections;
>>>> +import java.util.Comparator;
>>>> +import java.util.Date;
>>>> +import java.util.HashMap;
>>>> +import java.util.HashSet;
>>>> +import java.util.List;
>>>> +import java.util.Map;
>>>> +import java.util.Properties;
>>>> +import java.util.Set;
>>>> +import java.util.UUID;
>>>> +import java.util.concurrent.Callable;
>>>> +import java.util.concurrent.ConcurrentHashMap;
>>>> +import java.util.concurrent.ExecutionException;
>>>> +import java.util.concurrent.ExecutorService;
>>>> +import java.util.concurrent.Executors;
>>>> +import java.util.concurrent.Future;
>>>> +import java.util.concurrent.TimeUnit;
>>>> +import java.util.concurrent.TimeoutException;
>>>> +import java.util.regex.Matcher;
>>>> +import java.util.regex.Pattern;
>>>> +
>>>> +import javax.ejb.Local;
>>>> +import javax.naming.ConfigurationException;
>>>> +
>>>> +import org.apache.commons.io.FileUtils;
>>>> +import org.apache.commons.io.IOUtils;
>>>> +import org.apache.log4j.Logger;
>>>> +import org.libvirt.Connect;
>>>> +import org.libvirt.Domain;
>>>> +import org.libvirt.DomainBlockStats;
>>>> +import org.libvirt.DomainInfo;
>>>> +import org.libvirt.DomainInterfaceStats;
>>>> +import org.libvirt.DomainSnapshot;
>>>> +import org.libvirt.LibvirtException;
>>>> +import org.libvirt.NodeInfo;
>>>> +import org.libvirt.StorageVol;
>>>> +
>>>>   import com.ceph.rados.IoCTX;
>>>>   import com.ceph.rados.Rados;
>>>>   import com.ceph.rados.RadosException;
>>>>   import com.ceph.rbd.Rbd;
>>>>   import com.ceph.rbd.RbdException;
>>>>   import com.ceph.rbd.RbdImage;
>>>> +
>>>> +import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
>>>> +import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
>>>> +import org.apache.cloudstack.storage.to.VolumeObjectTO;
>>>> +import org.apache.cloudstack.utils.qemu.QemuImg;
>>>> +import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat;
>>>> +import org.apache.cloudstack.utils.qemu.QemuImgException;
>>>> +import org.apache.cloudstack.utils.qemu.QemuImgFile;
>>>> +
>>>>   import com.cloud.agent.api.Answer;
>>>>   import com.cloud.agent.api.AttachIsoCommand;
>>>>   import com.cloud.agent.api.AttachVolumeAnswer;
>>>> @@ -202,71 +269,6 @@ import com.cloud.vm.VirtualMachine;
>>>>   import com.cloud.vm.VirtualMachine.PowerState;
>>>>   import com.cloud.vm.VirtualMachine.State;
>>>>   -import
>>>>org.apache.cloudstack.storage.command.StorageSubSystemCommand;
>>>> -import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
>>>> -import org.apache.cloudstack.storage.to.VolumeObjectTO;
>>>> -import org.apache.cloudstack.utils.qemu.QemuImg;
>>>> -import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat;
>>>> -import org.apache.cloudstack.utils.qemu.QemuImgException;
>>>> -import org.apache.cloudstack.utils.qemu.QemuImgFile;
>>>> -import org.apache.commons.io.FileUtils;
>>>> -import org.apache.commons.io.IOUtils;
>>>> -import org.apache.log4j.Logger;
>>>> -import org.libvirt.Connect;
>>>> -import org.libvirt.Domain;
>>>> -import org.libvirt.DomainBlockStats;
>>>> -import org.libvirt.DomainInfo;
>>>> -import org.libvirt.DomainInterfaceStats;
>>>> -import org.libvirt.DomainSnapshot;
>>>> -import org.libvirt.LibvirtException;
>>>> -import org.libvirt.NodeInfo;
>>>> -import org.libvirt.StorageVol;
>>>> -
>>>> -import javax.ejb.Local;
>>>> -import javax.naming.ConfigurationException;
>>>> -
>>>> -import java.io.BufferedOutputStream;
>>>> -import java.io.BufferedReader;
>>>> -import java.io.File;
>>>> -import java.io.FileNotFoundException;
>>>> -import java.io.FileOutputStream;
>>>> -import java.io.FileReader;
>>>> -import java.io.IOException;
>>>> -import java.io.InputStream;
>>>> -import java.io.InputStreamReader;
>>>> -import java.io.Reader;
>>>> -import java.net.InetAddress;
>>>> -import java.net.URI;
>>>> -import java.net.URISyntaxException;
>>>> -import java.net.URL;
>>>> -import java.net.URLConnection;
>>>> -import java.text.DateFormat;
>>>> -import java.text.MessageFormat;
>>>> -import java.text.SimpleDateFormat;
>>>> -import java.util.ArrayList;
>>>> -import java.util.Arrays;
>>>> -import java.util.Calendar;
>>>> -import java.util.Collections;
>>>> -import java.util.Comparator;
>>>> -import java.util.Date;
>>>> -import java.util.HashMap;
>>>> -import java.util.HashSet;
>>>> -import java.util.List;
>>>> -import java.util.Map;
>>>> -import java.util.Properties;
>>>> -import java.util.Set;
>>>> -import java.util.UUID;
>>>> -import java.util.concurrent.Callable;
>>>> -import java.util.concurrent.ConcurrentHashMap;
>>>> -import java.util.concurrent.ExecutionException;
>>>> -import java.util.concurrent.ExecutorService;
>>>> -import java.util.concurrent.Executors;
>>>> -import java.util.concurrent.Future;
>>>> -import java.util.concurrent.TimeoutException;
>>>> -import java.util.concurrent.TimeUnit;
>>>> -import java.util.regex.Matcher;
>>>> -import java.util.regex.Pattern;
>>>> -
>>>>   /**
>>>>    * LibvirtComputingResource execute requests on the computing/routing
>>>> host using
>>>>    * the libvirt API
>>>> @@ -2006,7 +2008,7 @@ public class LibvirtComputingResource extends
>>>> ServerResourceBase implements Serv
>>>>           }
>>>>             Domain vm = getDomain(conn, vmName);
>>>> -        vm.attachDevice(getVifDriver(nicTO.getType()).plug(nicTO,
>>>>"Other
>>>> PV (32-bit)").toString());
>>>> +        vm.attachDevice(getVifDriver(nicTO.getType()).plug(nicTO,
>>>>"Other
>>>> PV").toString());
>>>>       }
>>>>     @@ -2043,7 +2045,7 @@ public class LibvirtComputingResource extends
>>>> ServerResourceBase implements Serv
>>>>                   }
>>>>                   nicnum++;
>>>>               }
>>>> -            vm.attachDevice(getVifDriver(nic.getType()).plug(nic,
>>>>"Other
>>>> PV (32-bit)").toString());
>>>> +            vm.attachDevice(getVifDriver(nic.getType()).plug(nic,
>>>>"Other
>>>> PV").toString());
>>>>               return new PlugNicAnswer(cmd, true, "success");
>>>>           } catch (LibvirtException e) {
>>>>               String msg = " Plug Nic failed due to " + e.toString();
>>>> @@ -3641,6 +3643,7 @@ public class LibvirtComputingResource extends
>>>> ServerResourceBase implements Serv
>>>>           uuid = getUuid(uuid);
>>>>           vm.setDomUUID(uuid);
>>>>           vm.setDomDescription(vmTO.getOs());
>>>> +        vm.setPlatformEmulator(vmTO.getPlatformEmulator());
>>>>             GuestDef guest = new GuestDef();
>>>>   @@ -3924,7 +3927,7 @@ public class LibvirtComputingResource extends
>>>> ServerResourceBase implements Serv
>>>>                   volPath = physicalDisk.getPath();
>>>>               }
>>>>   -            DiskDef.diskBus diskBusType =
>>>> getGuestDiskModel(vmSpec.getOs());
>>>> +            DiskDef.diskBus diskBusType =
>>>> getGuestDiskModel(vmSpec.getPlatformEmulator());
>>>>               DiskDef disk = new DiskDef();
>>>>               if (volume.getType() == Volume.Type.ISO) {
>>>>                   if (volPath == null) {
>>>> @@ -4004,7 +4007,7 @@ public class LibvirtComputingResource extends
>>>> ServerResourceBase implements Serv
>>>>       }
>>>>         private void createVif(LibvirtVMDef vm, NicTO nic) throws
>>>> InternalErrorException, LibvirtException {
>>>> -
>>>>vm.getDevices().addDevice(getVifDriver(nic.getType()).plug(nic,
>>>> vm.getGuestOSType()).toString());
>>>> +
>>>>vm.getDevices().addDevice(getVifDriver(nic.getType()).plug(nic,
>>>> vm.getPlatformEmulator()).toString());
>>>>       }
>>>>         protected CheckSshAnswer execute(CheckSshCommand cmd) {
>>>> @@ -4938,16 +4941,15 @@ public class LibvirtComputingResource extends
>>>> ServerResourceBase implements Serv
>>>>           }
>>>>       }
>>>>   -    boolean isGuestPVEnabled(String guestOS) {
>>>> -        if (guestOS == null) {
>>>> +    boolean isGuestPVEnabled(String guestOSName) {
>>>> +        if (guestOSName == null) {
>>>>               return false;
>>>>           }
>>>> -        String guestOSName = KVMGuestOsMapper.getGuestOsName(guestOS);
>>>> -        if (guestOS.startsWith("Ubuntu") ||
>>>> guestOSName.startsWith("Fedora 13") || guestOSName.startsWith("Fedora
>>>>12")
>>>> || guestOSName.startsWith("Fedora 11") ||
>>>> +        if (guestOSName.startsWith("Ubuntu") ||
>>>> guestOSName.startsWith("Fedora 13") || guestOSName.startsWith("Fedora
>>>>12")
>>>> || guestOSName.startsWith("Fedora 11") ||
>>>>                   guestOSName.startsWith("Fedora 10") ||
>>>> guestOSName.startsWith("Fedora 9") || guestOSName.startsWith("CentOS
>>>>5.3")
>>>> || guestOSName.startsWith("CentOS 5.4") ||
>>>> -                guestOSName.startsWith("CentOS 5.5") ||
>>>> guestOS.startsWith("CentOS") || guestOS.startsWith("Fedora") ||
>>>> +                guestOSName.startsWith("CentOS 5.5") ||
>>>> guestOSName.startsWith("CentOS") || guestOSName.startsWith("Fedora") ||
>>>>                   guestOSName.startsWith("Red Hat Enterprise Linux
>>>>5.3")
>>>> || guestOSName.startsWith("Red Hat Enterprise Linux 5.4") ||
>>>> -                guestOSName.startsWith("Red Hat Enterprise Linux
>>>>5.5") ||
>>>> guestOSName.startsWith("Red Hat Enterprise Linux 6") ||
>>>> guestOS.startsWith("Debian GNU/Linux") ||
>>>> +                guestOSName.startsWith("Red Hat Enterprise Linux
>>>>5.5") ||
>>>> guestOSName.startsWith("Red Hat Enterprise Linux 6") ||
>>>> guestOSName.startsWith("Debian GNU/Linux") ||
>>>>                   guestOSName.startsWith("FreeBSD 10") ||
>>>> guestOSName.startsWith("Other PV")) {
>>>>               return true;
>>>>           } else {
>>>> @@ -4963,8 +4965,8 @@ public class LibvirtComputingResource extends
>>>> ServerResourceBase implements Serv
>>>>           }
>>>>       }
>>>>   -    private DiskDef.diskBus getGuestDiskModel(String guestOSType) {
>>>> -        if (isGuestPVEnabled(guestOSType)) {
>>>> +    private DiskDef.diskBus getGuestDiskModel(String
>>>>platformEmulator) {
>>>> +        if (isGuestPVEnabled(platformEmulator)) {
>>>>               return DiskDef.diskBus.VIRTIO;
>>>>           } else {
>>>>               return DiskDef.diskBus.IDE;
>>>>
>>>>
>>>>
>>>>http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/plugins/
>>>>hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
>>>> ----------------------------------------------------------------------
>>>> diff --git
>>>>
>>>>a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtV
>>>>MDef.java
>>>>
>>>>b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtV
>>>>MDef.java
>>>> index 4032305..f6c3edf 100644
>>>> ---
>>>>
>>>>a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtV
>>>>MDef.java
>>>> +++
>>>>
>>>>b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtV
>>>>MDef.java
>>>> @@ -28,6 +28,7 @@ public class LibvirtVMDef {
>>>>       private String _domName;
>>>>       private String _domUUID;
>>>>       private String _desc;
>>>> +    private String _platformEmulator;
>>>>       private final Map<String, Object> components = new
>>>>HashMap<String,
>>>> Object>();
>>>>         public static class GuestDef {
>>>> @@ -1179,6 +1180,14 @@ public class LibvirtVMDef {
>>>>           return _desc;
>>>>       }
>>>>   +    public void setPlatformEmulator(String platformEmulator) {
>>>> +        _platformEmulator = platformEmulator;
>>>> +    }
>>>> +
>>>> +    public String getPlatformEmulator() {
>>>> +        return _platformEmulator;
>>>> +    }
>>>> +
>>>>       public void addComp(Object comp) {
>>>>           components.put(comp.getClass().toString(), comp);
>>>>       }
>>>>
>>>>
>>>>
>>>>http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/plugins/
>>>>hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDriverBase.java
>>>> ----------------------------------------------------------------------
>>>> diff --git
>>>>
>>>>a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDrive
>>>>rBase.java
>>>>
>>>>b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDrive
>>>>rBase.java
>>>> index d89d71a..53e81fd 100644
>>>> ---
>>>>
>>>>a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDrive
>>>>rBase.java
>>>> +++
>>>>
>>>>b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDrive
>>>>rBase.java
>>>> @@ -47,8 +47,8 @@ public abstract class VifDriverBase implements
>>>>VifDriver
>>>> {
>>>>       @Override
>>>>       public abstract void unplug(LibvirtVMDef.InterfaceDef iface);
>>>>   -    protected LibvirtVMDef.InterfaceDef.nicModel
>>>> getGuestNicModel(String guestOSType) {
>>>> -        if (_libvirtComputingResource.isGuestPVEnabled(guestOSType)) {
>>>> +    protected LibvirtVMDef.InterfaceDef.nicModel
>>>>getGuestNicModel(String
>>>> platformEmulator) {
>>>> +        if
>>>>(_libvirtComputingResource.isGuestPVEnabled(platformEmulator))
>>>> {
>>>>               return LibvirtVMDef.InterfaceDef.nicModel.VIRTIO;
>>>>           } else {
>>>>               return LibvirtVMDef.InterfaceDef.nicModel.E1000;
>>>>
>>>>
>>>>
>>>>http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/server/s
>>>>rc/com/cloud/hypervisor/KVMGuru.java
>>>> ----------------------------------------------------------------------
>>>> diff --git a/server/src/com/cloud/hypervisor/KVMGuru.java
>>>> b/server/src/com/cloud/hypervisor/KVMGuru.java
>>>> index 174b32d..4225232 100644
>>>> --- a/server/src/com/cloud/hypervisor/KVMGuru.java
>>>> +++ b/server/src/com/cloud/hypervisor/KVMGuru.java
>>>> @@ -19,19 +19,28 @@ package com.cloud.hypervisor;
>>>>   import javax.ejb.Local;
>>>>   import javax.inject.Inject;
>>>>   +import
>>>>org.apache.cloudstack.storage.command.StorageSubSystemCommand;
>>>> +
>>>>   import com.cloud.agent.api.Command;
>>>>   import com.cloud.agent.api.to.VirtualMachineTO;
>>>> +import com.cloud.host.HostVO;
>>>> +import com.cloud.host.dao.HostDao;
>>>>   import com.cloud.hypervisor.Hypervisor.HypervisorType;
>>>> +import com.cloud.storage.GuestOSHypervisorVO;
>>>>   import com.cloud.storage.GuestOSVO;
>>>>   import com.cloud.storage.dao.GuestOSDao;
>>>> +import com.cloud.storage.dao.GuestOSHypervisorDao;
>>>>   import com.cloud.utils.Pair;
>>>>   import com.cloud.vm.VirtualMachineProfile;
>>>> -import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
>>>>     @Local(value = HypervisorGuru.class)
>>>>   public class KVMGuru extends HypervisorGuruBase implements
>>>> HypervisorGuru {
>>>>       @Inject
>>>>       GuestOSDao _guestOsDao;
>>>> +    @Inject
>>>> +    GuestOSHypervisorDao _guestOsHypervisorDao;
>>>> +    @Inject
>>>> +    HostDao _hostDao;
>>>>         @Override
>>>>       public HypervisorType getHypervisorType() {
>>>> @@ -50,6 +59,9 @@ public class KVMGuru extends HypervisorGuruBase
>>>> implements HypervisorGuru {
>>>>           // Determine the VM's OS description
>>>>           GuestOSVO guestOS =
>>>> _guestOsDao.findById(vm.getVirtualMachine().getGuestOSId());
>>>>           to.setOs(guestOS.getDisplayName());
>>>> +        HostVO host =
>>>> _hostDao.findById(vm.getVirtualMachine().getHostId());
>>>> +        GuestOSHypervisorVO guestOsMapping =
>>>> _guestOsHypervisorDao.findByOsIdAndHypervisor(guestOS.getId(),
>>>> getHypervisorType().toString(), host.getHypervisorVersion());
>>>> +        to.setPlatformEmulator(guestOsMapping.getGuestOsName());
>>>>             return to;
>>>>       }
>>>>
>>>>
>>>
>>
>>
>>
>>--
>>Daan
>



-- 
Daan

Re: [2/2] git commit: updated refs/heads/4.4 to 02bd3d0

Posted by Amogh Vasekar <am...@citrix.com>.
Hi,

Can you please let me know the guest OS name for the ISO you are using?
May be one of the mappings is missing from DB, since Cent-os seems to be
working.

Thanks,
Amogh

On 5/16/14 8:46 AM, "Daan Hoogland" <da...@gmail.com> wrote:

>Nitin, Amogh,
>
>Can you have a quick look? please advice if I should revert or add a
>missing commit.
>
>regards,
>Daan
>
>On Fri, May 16, 2014 at 12:55 PM, Milamber <mi...@apache.org> wrote:
>> Hello,
>>
>> This commit creating an NPE issue when you add a new kvm instance from
>>ISO.
>>
>> See: https://issues.apache.org/jira/browse/CLOUDSTACK-6671
>>
>> Milamber
>>
>>
>> Le 13/05/2014 09:33, dahn@apache.org a ecrit :
>>
>>> CLOUDSTACK-6358: As a part of supporting dynamic guest OS defined by
>>>user,
>>> removing the hard-coded dependencies.
>>> This patch is for KVM
>>>
>>> 1. Local testing on KVM
>>> 2. Successfully got up system VMs
>>> 3. Successfully created a CentOS VM
>>> 4. Snapshots are not supported for KVM
>>>
>>>   Signed off by :- Nitin Mehta<ni...@citrix.com>
>>>
>>>
>>> Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
>>> Commit: 
>>>http://git-wip-us.apache.org/repos/asf/cloudstack/commit/02bd3d06
>>> Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/02bd3d06
>>> Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/02bd3d06
>>>
>>> Branch: refs/heads/4.4
>>> Commit: 02bd3d0671b0cde46f8aa7892f20aa0bb0d48d1c
>>> Parents: 1fb358d
>>> Author: Amogh Vasekar <am...@citrix.com>
>>> Authored: Wed May 7 15:16:55 2014 -0700
>>> Committer: Daan Hoogland <da...@onecht.net>
>>> Committed: Tue May 13 10:33:15 2014 +0200
>>>
>>> ----------------------------------------------------------------------
>>>   .../storage/dao/GuestOSHypervisorDaoImpl.java   |   6 +-
>>>   .../kvm/resource/LibvirtComputingResource.java  | 156
>>> ++++++++++---------
>>>   .../hypervisor/kvm/resource/LibvirtVMDef.java   |   9 ++
>>>   .../hypervisor/kvm/resource/VifDriverBase.java  |   4 +-
>>>   server/src/com/cloud/hypervisor/KVMGuru.java    |  14 +-
>>>   5 files changed, 108 insertions(+), 81 deletions(-)
>>> ----------------------------------------------------------------------
>>>
>>>
>>>
>>> 
>>>http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/engine/s
>>>chema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
>>> ----------------------------------------------------------------------
>>> diff --git
>>> a/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
>>> b/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
>>> index 3b05120..b06cdfa 100644
>>> ---
>>> a/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
>>> +++
>>> b/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
>>> @@ -58,9 +58,13 @@ public class GuestOSHypervisorDaoImpl extends
>>> GenericDaoBase<GuestOSHypervisorVO
>>>       @Override
>>>       public GuestOSHypervisorVO findByOsIdAndHypervisor(long
>>>guestOsId,
>>> String hypervisorType, String hypervisorVersion) {
>>>           SearchCriteria<GuestOSHypervisorVO> sc =
>>>mappingSearch.create();
>>> +        String version = "default";
>>> +        if (!(hypervisorVersion == null ||
>>>hypervisorVersion.isEmpty()))
>>> {
>>> +            version = hypervisorVersion;
>>> +        }
>>>           sc.setParameters("guest_os_id", guestOsId);
>>>           sc.setParameters("hypervisor_type", hypervisorType);
>>> -        sc.setParameters("hypervisor_version", hypervisorVersion);
>>> +        sc.setParameters("hypervisor_version", version);
>>>           return findOneBy(sc);
>>>       }
>>>
>>>
>>> 
>>>http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/plugins/
>>>hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingRe
>>>source.java
>>> ----------------------------------------------------------------------
>>> diff --git
>>> 
>>>a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtC
>>>omputingResource.java
>>> 
>>>b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtC
>>>omputingResource.java
>>> index 345a8ee..b8f33e5 100755
>>> ---
>>> 
>>>a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtC
>>>omputingResource.java
>>> +++
>>> 
>>>b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtC
>>>omputingResource.java
>>> @@ -16,12 +16,79 @@
>>>   // under the License.
>>>   package com.cloud.hypervisor.kvm.resource;
>>>   +import java.io.BufferedOutputStream;
>>> +import java.io.BufferedReader;
>>> +import java.io.File;
>>> +import java.io.FileNotFoundException;
>>> +import java.io.FileOutputStream;
>>> +import java.io.FileReader;
>>> +import java.io.IOException;
>>> +import java.io.InputStream;
>>> +import java.io.InputStreamReader;
>>> +import java.io.Reader;
>>> +import java.net.InetAddress;
>>> +import java.net.URI;
>>> +import java.net.URISyntaxException;
>>> +import java.net.URL;
>>> +import java.net.URLConnection;
>>> +import java.text.DateFormat;
>>> +import java.text.MessageFormat;
>>> +import java.text.SimpleDateFormat;
>>> +import java.util.ArrayList;
>>> +import java.util.Arrays;
>>> +import java.util.Calendar;
>>> +import java.util.Collections;
>>> +import java.util.Comparator;
>>> +import java.util.Date;
>>> +import java.util.HashMap;
>>> +import java.util.HashSet;
>>> +import java.util.List;
>>> +import java.util.Map;
>>> +import java.util.Properties;
>>> +import java.util.Set;
>>> +import java.util.UUID;
>>> +import java.util.concurrent.Callable;
>>> +import java.util.concurrent.ConcurrentHashMap;
>>> +import java.util.concurrent.ExecutionException;
>>> +import java.util.concurrent.ExecutorService;
>>> +import java.util.concurrent.Executors;
>>> +import java.util.concurrent.Future;
>>> +import java.util.concurrent.TimeUnit;
>>> +import java.util.concurrent.TimeoutException;
>>> +import java.util.regex.Matcher;
>>> +import java.util.regex.Pattern;
>>> +
>>> +import javax.ejb.Local;
>>> +import javax.naming.ConfigurationException;
>>> +
>>> +import org.apache.commons.io.FileUtils;
>>> +import org.apache.commons.io.IOUtils;
>>> +import org.apache.log4j.Logger;
>>> +import org.libvirt.Connect;
>>> +import org.libvirt.Domain;
>>> +import org.libvirt.DomainBlockStats;
>>> +import org.libvirt.DomainInfo;
>>> +import org.libvirt.DomainInterfaceStats;
>>> +import org.libvirt.DomainSnapshot;
>>> +import org.libvirt.LibvirtException;
>>> +import org.libvirt.NodeInfo;
>>> +import org.libvirt.StorageVol;
>>> +
>>>   import com.ceph.rados.IoCTX;
>>>   import com.ceph.rados.Rados;
>>>   import com.ceph.rados.RadosException;
>>>   import com.ceph.rbd.Rbd;
>>>   import com.ceph.rbd.RbdException;
>>>   import com.ceph.rbd.RbdImage;
>>> +
>>> +import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
>>> +import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
>>> +import org.apache.cloudstack.storage.to.VolumeObjectTO;
>>> +import org.apache.cloudstack.utils.qemu.QemuImg;
>>> +import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat;
>>> +import org.apache.cloudstack.utils.qemu.QemuImgException;
>>> +import org.apache.cloudstack.utils.qemu.QemuImgFile;
>>> +
>>>   import com.cloud.agent.api.Answer;
>>>   import com.cloud.agent.api.AttachIsoCommand;
>>>   import com.cloud.agent.api.AttachVolumeAnswer;
>>> @@ -202,71 +269,6 @@ import com.cloud.vm.VirtualMachine;
>>>   import com.cloud.vm.VirtualMachine.PowerState;
>>>   import com.cloud.vm.VirtualMachine.State;
>>>   -import 
>>>org.apache.cloudstack.storage.command.StorageSubSystemCommand;
>>> -import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
>>> -import org.apache.cloudstack.storage.to.VolumeObjectTO;
>>> -import org.apache.cloudstack.utils.qemu.QemuImg;
>>> -import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat;
>>> -import org.apache.cloudstack.utils.qemu.QemuImgException;
>>> -import org.apache.cloudstack.utils.qemu.QemuImgFile;
>>> -import org.apache.commons.io.FileUtils;
>>> -import org.apache.commons.io.IOUtils;
>>> -import org.apache.log4j.Logger;
>>> -import org.libvirt.Connect;
>>> -import org.libvirt.Domain;
>>> -import org.libvirt.DomainBlockStats;
>>> -import org.libvirt.DomainInfo;
>>> -import org.libvirt.DomainInterfaceStats;
>>> -import org.libvirt.DomainSnapshot;
>>> -import org.libvirt.LibvirtException;
>>> -import org.libvirt.NodeInfo;
>>> -import org.libvirt.StorageVol;
>>> -
>>> -import javax.ejb.Local;
>>> -import javax.naming.ConfigurationException;
>>> -
>>> -import java.io.BufferedOutputStream;
>>> -import java.io.BufferedReader;
>>> -import java.io.File;
>>> -import java.io.FileNotFoundException;
>>> -import java.io.FileOutputStream;
>>> -import java.io.FileReader;
>>> -import java.io.IOException;
>>> -import java.io.InputStream;
>>> -import java.io.InputStreamReader;
>>> -import java.io.Reader;
>>> -import java.net.InetAddress;
>>> -import java.net.URI;
>>> -import java.net.URISyntaxException;
>>> -import java.net.URL;
>>> -import java.net.URLConnection;
>>> -import java.text.DateFormat;
>>> -import java.text.MessageFormat;
>>> -import java.text.SimpleDateFormat;
>>> -import java.util.ArrayList;
>>> -import java.util.Arrays;
>>> -import java.util.Calendar;
>>> -import java.util.Collections;
>>> -import java.util.Comparator;
>>> -import java.util.Date;
>>> -import java.util.HashMap;
>>> -import java.util.HashSet;
>>> -import java.util.List;
>>> -import java.util.Map;
>>> -import java.util.Properties;
>>> -import java.util.Set;
>>> -import java.util.UUID;
>>> -import java.util.concurrent.Callable;
>>> -import java.util.concurrent.ConcurrentHashMap;
>>> -import java.util.concurrent.ExecutionException;
>>> -import java.util.concurrent.ExecutorService;
>>> -import java.util.concurrent.Executors;
>>> -import java.util.concurrent.Future;
>>> -import java.util.concurrent.TimeoutException;
>>> -import java.util.concurrent.TimeUnit;
>>> -import java.util.regex.Matcher;
>>> -import java.util.regex.Pattern;
>>> -
>>>   /**
>>>    * LibvirtComputingResource execute requests on the computing/routing
>>> host using
>>>    * the libvirt API
>>> @@ -2006,7 +2008,7 @@ public class LibvirtComputingResource extends
>>> ServerResourceBase implements Serv
>>>           }
>>>             Domain vm = getDomain(conn, vmName);
>>> -        vm.attachDevice(getVifDriver(nicTO.getType()).plug(nicTO,
>>>"Other
>>> PV (32-bit)").toString());
>>> +        vm.attachDevice(getVifDriver(nicTO.getType()).plug(nicTO,
>>>"Other
>>> PV").toString());
>>>       }
>>>     @@ -2043,7 +2045,7 @@ public class LibvirtComputingResource extends
>>> ServerResourceBase implements Serv
>>>                   }
>>>                   nicnum++;
>>>               }
>>> -            vm.attachDevice(getVifDriver(nic.getType()).plug(nic,
>>>"Other
>>> PV (32-bit)").toString());
>>> +            vm.attachDevice(getVifDriver(nic.getType()).plug(nic,
>>>"Other
>>> PV").toString());
>>>               return new PlugNicAnswer(cmd, true, "success");
>>>           } catch (LibvirtException e) {
>>>               String msg = " Plug Nic failed due to " + e.toString();
>>> @@ -3641,6 +3643,7 @@ public class LibvirtComputingResource extends
>>> ServerResourceBase implements Serv
>>>           uuid = getUuid(uuid);
>>>           vm.setDomUUID(uuid);
>>>           vm.setDomDescription(vmTO.getOs());
>>> +        vm.setPlatformEmulator(vmTO.getPlatformEmulator());
>>>             GuestDef guest = new GuestDef();
>>>   @@ -3924,7 +3927,7 @@ public class LibvirtComputingResource extends
>>> ServerResourceBase implements Serv
>>>                   volPath = physicalDisk.getPath();
>>>               }
>>>   -            DiskDef.diskBus diskBusType =
>>> getGuestDiskModel(vmSpec.getOs());
>>> +            DiskDef.diskBus diskBusType =
>>> getGuestDiskModel(vmSpec.getPlatformEmulator());
>>>               DiskDef disk = new DiskDef();
>>>               if (volume.getType() == Volume.Type.ISO) {
>>>                   if (volPath == null) {
>>> @@ -4004,7 +4007,7 @@ public class LibvirtComputingResource extends
>>> ServerResourceBase implements Serv
>>>       }
>>>         private void createVif(LibvirtVMDef vm, NicTO nic) throws
>>> InternalErrorException, LibvirtException {
>>> -        
>>>vm.getDevices().addDevice(getVifDriver(nic.getType()).plug(nic,
>>> vm.getGuestOSType()).toString());
>>> +        
>>>vm.getDevices().addDevice(getVifDriver(nic.getType()).plug(nic,
>>> vm.getPlatformEmulator()).toString());
>>>       }
>>>         protected CheckSshAnswer execute(CheckSshCommand cmd) {
>>> @@ -4938,16 +4941,15 @@ public class LibvirtComputingResource extends
>>> ServerResourceBase implements Serv
>>>           }
>>>       }
>>>   -    boolean isGuestPVEnabled(String guestOS) {
>>> -        if (guestOS == null) {
>>> +    boolean isGuestPVEnabled(String guestOSName) {
>>> +        if (guestOSName == null) {
>>>               return false;
>>>           }
>>> -        String guestOSName = KVMGuestOsMapper.getGuestOsName(guestOS);
>>> -        if (guestOS.startsWith("Ubuntu") ||
>>> guestOSName.startsWith("Fedora 13") || guestOSName.startsWith("Fedora
>>>12")
>>> || guestOSName.startsWith("Fedora 11") ||
>>> +        if (guestOSName.startsWith("Ubuntu") ||
>>> guestOSName.startsWith("Fedora 13") || guestOSName.startsWith("Fedora
>>>12")
>>> || guestOSName.startsWith("Fedora 11") ||
>>>                   guestOSName.startsWith("Fedora 10") ||
>>> guestOSName.startsWith("Fedora 9") || guestOSName.startsWith("CentOS
>>>5.3")
>>> || guestOSName.startsWith("CentOS 5.4") ||
>>> -                guestOSName.startsWith("CentOS 5.5") ||
>>> guestOS.startsWith("CentOS") || guestOS.startsWith("Fedora") ||
>>> +                guestOSName.startsWith("CentOS 5.5") ||
>>> guestOSName.startsWith("CentOS") || guestOSName.startsWith("Fedora") ||
>>>                   guestOSName.startsWith("Red Hat Enterprise Linux
>>>5.3")
>>> || guestOSName.startsWith("Red Hat Enterprise Linux 5.4") ||
>>> -                guestOSName.startsWith("Red Hat Enterprise Linux
>>>5.5") ||
>>> guestOSName.startsWith("Red Hat Enterprise Linux 6") ||
>>> guestOS.startsWith("Debian GNU/Linux") ||
>>> +                guestOSName.startsWith("Red Hat Enterprise Linux
>>>5.5") ||
>>> guestOSName.startsWith("Red Hat Enterprise Linux 6") ||
>>> guestOSName.startsWith("Debian GNU/Linux") ||
>>>                   guestOSName.startsWith("FreeBSD 10") ||
>>> guestOSName.startsWith("Other PV")) {
>>>               return true;
>>>           } else {
>>> @@ -4963,8 +4965,8 @@ public class LibvirtComputingResource extends
>>> ServerResourceBase implements Serv
>>>           }
>>>       }
>>>   -    private DiskDef.diskBus getGuestDiskModel(String guestOSType) {
>>> -        if (isGuestPVEnabled(guestOSType)) {
>>> +    private DiskDef.diskBus getGuestDiskModel(String
>>>platformEmulator) {
>>> +        if (isGuestPVEnabled(platformEmulator)) {
>>>               return DiskDef.diskBus.VIRTIO;
>>>           } else {
>>>               return DiskDef.diskBus.IDE;
>>>
>>>
>>> 
>>>http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/plugins/
>>>hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
>>> ----------------------------------------------------------------------
>>> diff --git
>>> 
>>>a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtV
>>>MDef.java
>>> 
>>>b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtV
>>>MDef.java
>>> index 4032305..f6c3edf 100644
>>> ---
>>> 
>>>a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtV
>>>MDef.java
>>> +++
>>> 
>>>b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtV
>>>MDef.java
>>> @@ -28,6 +28,7 @@ public class LibvirtVMDef {
>>>       private String _domName;
>>>       private String _domUUID;
>>>       private String _desc;
>>> +    private String _platformEmulator;
>>>       private final Map<String, Object> components = new
>>>HashMap<String,
>>> Object>();
>>>         public static class GuestDef {
>>> @@ -1179,6 +1180,14 @@ public class LibvirtVMDef {
>>>           return _desc;
>>>       }
>>>   +    public void setPlatformEmulator(String platformEmulator) {
>>> +        _platformEmulator = platformEmulator;
>>> +    }
>>> +
>>> +    public String getPlatformEmulator() {
>>> +        return _platformEmulator;
>>> +    }
>>> +
>>>       public void addComp(Object comp) {
>>>           components.put(comp.getClass().toString(), comp);
>>>       }
>>>
>>>
>>> 
>>>http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/plugins/
>>>hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDriverBase.java
>>> ----------------------------------------------------------------------
>>> diff --git
>>> 
>>>a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDrive
>>>rBase.java
>>> 
>>>b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDrive
>>>rBase.java
>>> index d89d71a..53e81fd 100644
>>> ---
>>> 
>>>a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDrive
>>>rBase.java
>>> +++
>>> 
>>>b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDrive
>>>rBase.java
>>> @@ -47,8 +47,8 @@ public abstract class VifDriverBase implements
>>>VifDriver
>>> {
>>>       @Override
>>>       public abstract void unplug(LibvirtVMDef.InterfaceDef iface);
>>>   -    protected LibvirtVMDef.InterfaceDef.nicModel
>>> getGuestNicModel(String guestOSType) {
>>> -        if (_libvirtComputingResource.isGuestPVEnabled(guestOSType)) {
>>> +    protected LibvirtVMDef.InterfaceDef.nicModel
>>>getGuestNicModel(String
>>> platformEmulator) {
>>> +        if 
>>>(_libvirtComputingResource.isGuestPVEnabled(platformEmulator))
>>> {
>>>               return LibvirtVMDef.InterfaceDef.nicModel.VIRTIO;
>>>           } else {
>>>               return LibvirtVMDef.InterfaceDef.nicModel.E1000;
>>>
>>>
>>> 
>>>http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/server/s
>>>rc/com/cloud/hypervisor/KVMGuru.java
>>> ----------------------------------------------------------------------
>>> diff --git a/server/src/com/cloud/hypervisor/KVMGuru.java
>>> b/server/src/com/cloud/hypervisor/KVMGuru.java
>>> index 174b32d..4225232 100644
>>> --- a/server/src/com/cloud/hypervisor/KVMGuru.java
>>> +++ b/server/src/com/cloud/hypervisor/KVMGuru.java
>>> @@ -19,19 +19,28 @@ package com.cloud.hypervisor;
>>>   import javax.ejb.Local;
>>>   import javax.inject.Inject;
>>>   +import 
>>>org.apache.cloudstack.storage.command.StorageSubSystemCommand;
>>> +
>>>   import com.cloud.agent.api.Command;
>>>   import com.cloud.agent.api.to.VirtualMachineTO;
>>> +import com.cloud.host.HostVO;
>>> +import com.cloud.host.dao.HostDao;
>>>   import com.cloud.hypervisor.Hypervisor.HypervisorType;
>>> +import com.cloud.storage.GuestOSHypervisorVO;
>>>   import com.cloud.storage.GuestOSVO;
>>>   import com.cloud.storage.dao.GuestOSDao;
>>> +import com.cloud.storage.dao.GuestOSHypervisorDao;
>>>   import com.cloud.utils.Pair;
>>>   import com.cloud.vm.VirtualMachineProfile;
>>> -import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
>>>     @Local(value = HypervisorGuru.class)
>>>   public class KVMGuru extends HypervisorGuruBase implements
>>> HypervisorGuru {
>>>       @Inject
>>>       GuestOSDao _guestOsDao;
>>> +    @Inject
>>> +    GuestOSHypervisorDao _guestOsHypervisorDao;
>>> +    @Inject
>>> +    HostDao _hostDao;
>>>         @Override
>>>       public HypervisorType getHypervisorType() {
>>> @@ -50,6 +59,9 @@ public class KVMGuru extends HypervisorGuruBase
>>> implements HypervisorGuru {
>>>           // Determine the VM's OS description
>>>           GuestOSVO guestOS =
>>> _guestOsDao.findById(vm.getVirtualMachine().getGuestOSId());
>>>           to.setOs(guestOS.getDisplayName());
>>> +        HostVO host =
>>> _hostDao.findById(vm.getVirtualMachine().getHostId());
>>> +        GuestOSHypervisorVO guestOsMapping =
>>> _guestOsHypervisorDao.findByOsIdAndHypervisor(guestOS.getId(),
>>> getHypervisorType().toString(), host.getHypervisorVersion());
>>> +        to.setPlatformEmulator(guestOsMapping.getGuestOsName());
>>>             return to;
>>>       }
>>>
>>>
>>
>
>
>
>-- 
>Daan


Re: [2/2] git commit: updated refs/heads/4.4 to 02bd3d0

Posted by Daan Hoogland <da...@gmail.com>.
Nitin, Amogh,

Can you have a quick look? please advice if I should revert or add a
missing commit.

regards,
Daan

On Fri, May 16, 2014 at 12:55 PM, Milamber <mi...@apache.org> wrote:
> Hello,
>
> This commit creating an NPE issue when you add a new kvm instance from ISO.
>
> See: https://issues.apache.org/jira/browse/CLOUDSTACK-6671
>
> Milamber
>
>
> Le 13/05/2014 09:33, dahn@apache.org a ecrit :
>
>> CLOUDSTACK-6358: As a part of supporting dynamic guest OS defined by user,
>> removing the hard-coded dependencies.
>> This patch is for KVM
>>
>> 1. Local testing on KVM
>> 2. Successfully got up system VMs
>> 3. Successfully created a CentOS VM
>> 4. Snapshots are not supported for KVM
>>
>>   Signed off by :- Nitin Mehta<ni...@citrix.com>
>>
>>
>> Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
>> Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/02bd3d06
>> Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/02bd3d06
>> Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/02bd3d06
>>
>> Branch: refs/heads/4.4
>> Commit: 02bd3d0671b0cde46f8aa7892f20aa0bb0d48d1c
>> Parents: 1fb358d
>> Author: Amogh Vasekar <am...@citrix.com>
>> Authored: Wed May 7 15:16:55 2014 -0700
>> Committer: Daan Hoogland <da...@onecht.net>
>> Committed: Tue May 13 10:33:15 2014 +0200
>>
>> ----------------------------------------------------------------------
>>   .../storage/dao/GuestOSHypervisorDaoImpl.java   |   6 +-
>>   .../kvm/resource/LibvirtComputingResource.java  | 156
>> ++++++++++---------
>>   .../hypervisor/kvm/resource/LibvirtVMDef.java   |   9 ++
>>   .../hypervisor/kvm/resource/VifDriverBase.java  |   4 +-
>>   server/src/com/cloud/hypervisor/KVMGuru.java    |  14 +-
>>   5 files changed, 108 insertions(+), 81 deletions(-)
>> ----------------------------------------------------------------------
>>
>>
>>
>> http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
>> b/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
>> index 3b05120..b06cdfa 100644
>> ---
>> a/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
>> +++
>> b/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
>> @@ -58,9 +58,13 @@ public class GuestOSHypervisorDaoImpl extends
>> GenericDaoBase<GuestOSHypervisorVO
>>       @Override
>>       public GuestOSHypervisorVO findByOsIdAndHypervisor(long guestOsId,
>> String hypervisorType, String hypervisorVersion) {
>>           SearchCriteria<GuestOSHypervisorVO> sc = mappingSearch.create();
>> +        String version = "default";
>> +        if (!(hypervisorVersion == null || hypervisorVersion.isEmpty()))
>> {
>> +            version = hypervisorVersion;
>> +        }
>>           sc.setParameters("guest_os_id", guestOsId);
>>           sc.setParameters("hypervisor_type", hypervisorType);
>> -        sc.setParameters("hypervisor_version", hypervisorVersion);
>> +        sc.setParameters("hypervisor_version", version);
>>           return findOneBy(sc);
>>       }
>>
>>
>> http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
>> b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
>> index 345a8ee..b8f33e5 100755
>> ---
>> a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
>> +++
>> b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
>> @@ -16,12 +16,79 @@
>>   // under the License.
>>   package com.cloud.hypervisor.kvm.resource;
>>   +import java.io.BufferedOutputStream;
>> +import java.io.BufferedReader;
>> +import java.io.File;
>> +import java.io.FileNotFoundException;
>> +import java.io.FileOutputStream;
>> +import java.io.FileReader;
>> +import java.io.IOException;
>> +import java.io.InputStream;
>> +import java.io.InputStreamReader;
>> +import java.io.Reader;
>> +import java.net.InetAddress;
>> +import java.net.URI;
>> +import java.net.URISyntaxException;
>> +import java.net.URL;
>> +import java.net.URLConnection;
>> +import java.text.DateFormat;
>> +import java.text.MessageFormat;
>> +import java.text.SimpleDateFormat;
>> +import java.util.ArrayList;
>> +import java.util.Arrays;
>> +import java.util.Calendar;
>> +import java.util.Collections;
>> +import java.util.Comparator;
>> +import java.util.Date;
>> +import java.util.HashMap;
>> +import java.util.HashSet;
>> +import java.util.List;
>> +import java.util.Map;
>> +import java.util.Properties;
>> +import java.util.Set;
>> +import java.util.UUID;
>> +import java.util.concurrent.Callable;
>> +import java.util.concurrent.ConcurrentHashMap;
>> +import java.util.concurrent.ExecutionException;
>> +import java.util.concurrent.ExecutorService;
>> +import java.util.concurrent.Executors;
>> +import java.util.concurrent.Future;
>> +import java.util.concurrent.TimeUnit;
>> +import java.util.concurrent.TimeoutException;
>> +import java.util.regex.Matcher;
>> +import java.util.regex.Pattern;
>> +
>> +import javax.ejb.Local;
>> +import javax.naming.ConfigurationException;
>> +
>> +import org.apache.commons.io.FileUtils;
>> +import org.apache.commons.io.IOUtils;
>> +import org.apache.log4j.Logger;
>> +import org.libvirt.Connect;
>> +import org.libvirt.Domain;
>> +import org.libvirt.DomainBlockStats;
>> +import org.libvirt.DomainInfo;
>> +import org.libvirt.DomainInterfaceStats;
>> +import org.libvirt.DomainSnapshot;
>> +import org.libvirt.LibvirtException;
>> +import org.libvirt.NodeInfo;
>> +import org.libvirt.StorageVol;
>> +
>>   import com.ceph.rados.IoCTX;
>>   import com.ceph.rados.Rados;
>>   import com.ceph.rados.RadosException;
>>   import com.ceph.rbd.Rbd;
>>   import com.ceph.rbd.RbdException;
>>   import com.ceph.rbd.RbdImage;
>> +
>> +import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
>> +import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
>> +import org.apache.cloudstack.storage.to.VolumeObjectTO;
>> +import org.apache.cloudstack.utils.qemu.QemuImg;
>> +import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat;
>> +import org.apache.cloudstack.utils.qemu.QemuImgException;
>> +import org.apache.cloudstack.utils.qemu.QemuImgFile;
>> +
>>   import com.cloud.agent.api.Answer;
>>   import com.cloud.agent.api.AttachIsoCommand;
>>   import com.cloud.agent.api.AttachVolumeAnswer;
>> @@ -202,71 +269,6 @@ import com.cloud.vm.VirtualMachine;
>>   import com.cloud.vm.VirtualMachine.PowerState;
>>   import com.cloud.vm.VirtualMachine.State;
>>   -import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
>> -import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
>> -import org.apache.cloudstack.storage.to.VolumeObjectTO;
>> -import org.apache.cloudstack.utils.qemu.QemuImg;
>> -import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat;
>> -import org.apache.cloudstack.utils.qemu.QemuImgException;
>> -import org.apache.cloudstack.utils.qemu.QemuImgFile;
>> -import org.apache.commons.io.FileUtils;
>> -import org.apache.commons.io.IOUtils;
>> -import org.apache.log4j.Logger;
>> -import org.libvirt.Connect;
>> -import org.libvirt.Domain;
>> -import org.libvirt.DomainBlockStats;
>> -import org.libvirt.DomainInfo;
>> -import org.libvirt.DomainInterfaceStats;
>> -import org.libvirt.DomainSnapshot;
>> -import org.libvirt.LibvirtException;
>> -import org.libvirt.NodeInfo;
>> -import org.libvirt.StorageVol;
>> -
>> -import javax.ejb.Local;
>> -import javax.naming.ConfigurationException;
>> -
>> -import java.io.BufferedOutputStream;
>> -import java.io.BufferedReader;
>> -import java.io.File;
>> -import java.io.FileNotFoundException;
>> -import java.io.FileOutputStream;
>> -import java.io.FileReader;
>> -import java.io.IOException;
>> -import java.io.InputStream;
>> -import java.io.InputStreamReader;
>> -import java.io.Reader;
>> -import java.net.InetAddress;
>> -import java.net.URI;
>> -import java.net.URISyntaxException;
>> -import java.net.URL;
>> -import java.net.URLConnection;
>> -import java.text.DateFormat;
>> -import java.text.MessageFormat;
>> -import java.text.SimpleDateFormat;
>> -import java.util.ArrayList;
>> -import java.util.Arrays;
>> -import java.util.Calendar;
>> -import java.util.Collections;
>> -import java.util.Comparator;
>> -import java.util.Date;
>> -import java.util.HashMap;
>> -import java.util.HashSet;
>> -import java.util.List;
>> -import java.util.Map;
>> -import java.util.Properties;
>> -import java.util.Set;
>> -import java.util.UUID;
>> -import java.util.concurrent.Callable;
>> -import java.util.concurrent.ConcurrentHashMap;
>> -import java.util.concurrent.ExecutionException;
>> -import java.util.concurrent.ExecutorService;
>> -import java.util.concurrent.Executors;
>> -import java.util.concurrent.Future;
>> -import java.util.concurrent.TimeoutException;
>> -import java.util.concurrent.TimeUnit;
>> -import java.util.regex.Matcher;
>> -import java.util.regex.Pattern;
>> -
>>   /**
>>    * LibvirtComputingResource execute requests on the computing/routing
>> host using
>>    * the libvirt API
>> @@ -2006,7 +2008,7 @@ public class LibvirtComputingResource extends
>> ServerResourceBase implements Serv
>>           }
>>             Domain vm = getDomain(conn, vmName);
>> -        vm.attachDevice(getVifDriver(nicTO.getType()).plug(nicTO, "Other
>> PV (32-bit)").toString());
>> +        vm.attachDevice(getVifDriver(nicTO.getType()).plug(nicTO, "Other
>> PV").toString());
>>       }
>>     @@ -2043,7 +2045,7 @@ public class LibvirtComputingResource extends
>> ServerResourceBase implements Serv
>>                   }
>>                   nicnum++;
>>               }
>> -            vm.attachDevice(getVifDriver(nic.getType()).plug(nic, "Other
>> PV (32-bit)").toString());
>> +            vm.attachDevice(getVifDriver(nic.getType()).plug(nic, "Other
>> PV").toString());
>>               return new PlugNicAnswer(cmd, true, "success");
>>           } catch (LibvirtException e) {
>>               String msg = " Plug Nic failed due to " + e.toString();
>> @@ -3641,6 +3643,7 @@ public class LibvirtComputingResource extends
>> ServerResourceBase implements Serv
>>           uuid = getUuid(uuid);
>>           vm.setDomUUID(uuid);
>>           vm.setDomDescription(vmTO.getOs());
>> +        vm.setPlatformEmulator(vmTO.getPlatformEmulator());
>>             GuestDef guest = new GuestDef();
>>   @@ -3924,7 +3927,7 @@ public class LibvirtComputingResource extends
>> ServerResourceBase implements Serv
>>                   volPath = physicalDisk.getPath();
>>               }
>>   -            DiskDef.diskBus diskBusType =
>> getGuestDiskModel(vmSpec.getOs());
>> +            DiskDef.diskBus diskBusType =
>> getGuestDiskModel(vmSpec.getPlatformEmulator());
>>               DiskDef disk = new DiskDef();
>>               if (volume.getType() == Volume.Type.ISO) {
>>                   if (volPath == null) {
>> @@ -4004,7 +4007,7 @@ public class LibvirtComputingResource extends
>> ServerResourceBase implements Serv
>>       }
>>         private void createVif(LibvirtVMDef vm, NicTO nic) throws
>> InternalErrorException, LibvirtException {
>> -        vm.getDevices().addDevice(getVifDriver(nic.getType()).plug(nic,
>> vm.getGuestOSType()).toString());
>> +        vm.getDevices().addDevice(getVifDriver(nic.getType()).plug(nic,
>> vm.getPlatformEmulator()).toString());
>>       }
>>         protected CheckSshAnswer execute(CheckSshCommand cmd) {
>> @@ -4938,16 +4941,15 @@ public class LibvirtComputingResource extends
>> ServerResourceBase implements Serv
>>           }
>>       }
>>   -    boolean isGuestPVEnabled(String guestOS) {
>> -        if (guestOS == null) {
>> +    boolean isGuestPVEnabled(String guestOSName) {
>> +        if (guestOSName == null) {
>>               return false;
>>           }
>> -        String guestOSName = KVMGuestOsMapper.getGuestOsName(guestOS);
>> -        if (guestOS.startsWith("Ubuntu") ||
>> guestOSName.startsWith("Fedora 13") || guestOSName.startsWith("Fedora 12")
>> || guestOSName.startsWith("Fedora 11") ||
>> +        if (guestOSName.startsWith("Ubuntu") ||
>> guestOSName.startsWith("Fedora 13") || guestOSName.startsWith("Fedora 12")
>> || guestOSName.startsWith("Fedora 11") ||
>>                   guestOSName.startsWith("Fedora 10") ||
>> guestOSName.startsWith("Fedora 9") || guestOSName.startsWith("CentOS 5.3")
>> || guestOSName.startsWith("CentOS 5.4") ||
>> -                guestOSName.startsWith("CentOS 5.5") ||
>> guestOS.startsWith("CentOS") || guestOS.startsWith("Fedora") ||
>> +                guestOSName.startsWith("CentOS 5.5") ||
>> guestOSName.startsWith("CentOS") || guestOSName.startsWith("Fedora") ||
>>                   guestOSName.startsWith("Red Hat Enterprise Linux 5.3")
>> || guestOSName.startsWith("Red Hat Enterprise Linux 5.4") ||
>> -                guestOSName.startsWith("Red Hat Enterprise Linux 5.5") ||
>> guestOSName.startsWith("Red Hat Enterprise Linux 6") ||
>> guestOS.startsWith("Debian GNU/Linux") ||
>> +                guestOSName.startsWith("Red Hat Enterprise Linux 5.5") ||
>> guestOSName.startsWith("Red Hat Enterprise Linux 6") ||
>> guestOSName.startsWith("Debian GNU/Linux") ||
>>                   guestOSName.startsWith("FreeBSD 10") ||
>> guestOSName.startsWith("Other PV")) {
>>               return true;
>>           } else {
>> @@ -4963,8 +4965,8 @@ public class LibvirtComputingResource extends
>> ServerResourceBase implements Serv
>>           }
>>       }
>>   -    private DiskDef.diskBus getGuestDiskModel(String guestOSType) {
>> -        if (isGuestPVEnabled(guestOSType)) {
>> +    private DiskDef.diskBus getGuestDiskModel(String platformEmulator) {
>> +        if (isGuestPVEnabled(platformEmulator)) {
>>               return DiskDef.diskBus.VIRTIO;
>>           } else {
>>               return DiskDef.diskBus.IDE;
>>
>>
>> http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
>> b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
>> index 4032305..f6c3edf 100644
>> ---
>> a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
>> +++
>> b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
>> @@ -28,6 +28,7 @@ public class LibvirtVMDef {
>>       private String _domName;
>>       private String _domUUID;
>>       private String _desc;
>> +    private String _platformEmulator;
>>       private final Map<String, Object> components = new HashMap<String,
>> Object>();
>>         public static class GuestDef {
>> @@ -1179,6 +1180,14 @@ public class LibvirtVMDef {
>>           return _desc;
>>       }
>>   +    public void setPlatformEmulator(String platformEmulator) {
>> +        _platformEmulator = platformEmulator;
>> +    }
>> +
>> +    public String getPlatformEmulator() {
>> +        return _platformEmulator;
>> +    }
>> +
>>       public void addComp(Object comp) {
>>           components.put(comp.getClass().toString(), comp);
>>       }
>>
>>
>> http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDriverBase.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDriverBase.java
>> b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDriverBase.java
>> index d89d71a..53e81fd 100644
>> ---
>> a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDriverBase.java
>> +++
>> b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDriverBase.java
>> @@ -47,8 +47,8 @@ public abstract class VifDriverBase implements VifDriver
>> {
>>       @Override
>>       public abstract void unplug(LibvirtVMDef.InterfaceDef iface);
>>   -    protected LibvirtVMDef.InterfaceDef.nicModel
>> getGuestNicModel(String guestOSType) {
>> -        if (_libvirtComputingResource.isGuestPVEnabled(guestOSType)) {
>> +    protected LibvirtVMDef.InterfaceDef.nicModel getGuestNicModel(String
>> platformEmulator) {
>> +        if (_libvirtComputingResource.isGuestPVEnabled(platformEmulator))
>> {
>>               return LibvirtVMDef.InterfaceDef.nicModel.VIRTIO;
>>           } else {
>>               return LibvirtVMDef.InterfaceDef.nicModel.E1000;
>>
>>
>> http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/server/src/com/cloud/hypervisor/KVMGuru.java
>> ----------------------------------------------------------------------
>> diff --git a/server/src/com/cloud/hypervisor/KVMGuru.java
>> b/server/src/com/cloud/hypervisor/KVMGuru.java
>> index 174b32d..4225232 100644
>> --- a/server/src/com/cloud/hypervisor/KVMGuru.java
>> +++ b/server/src/com/cloud/hypervisor/KVMGuru.java
>> @@ -19,19 +19,28 @@ package com.cloud.hypervisor;
>>   import javax.ejb.Local;
>>   import javax.inject.Inject;
>>   +import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
>> +
>>   import com.cloud.agent.api.Command;
>>   import com.cloud.agent.api.to.VirtualMachineTO;
>> +import com.cloud.host.HostVO;
>> +import com.cloud.host.dao.HostDao;
>>   import com.cloud.hypervisor.Hypervisor.HypervisorType;
>> +import com.cloud.storage.GuestOSHypervisorVO;
>>   import com.cloud.storage.GuestOSVO;
>>   import com.cloud.storage.dao.GuestOSDao;
>> +import com.cloud.storage.dao.GuestOSHypervisorDao;
>>   import com.cloud.utils.Pair;
>>   import com.cloud.vm.VirtualMachineProfile;
>> -import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
>>     @Local(value = HypervisorGuru.class)
>>   public class KVMGuru extends HypervisorGuruBase implements
>> HypervisorGuru {
>>       @Inject
>>       GuestOSDao _guestOsDao;
>> +    @Inject
>> +    GuestOSHypervisorDao _guestOsHypervisorDao;
>> +    @Inject
>> +    HostDao _hostDao;
>>         @Override
>>       public HypervisorType getHypervisorType() {
>> @@ -50,6 +59,9 @@ public class KVMGuru extends HypervisorGuruBase
>> implements HypervisorGuru {
>>           // Determine the VM's OS description
>>           GuestOSVO guestOS =
>> _guestOsDao.findById(vm.getVirtualMachine().getGuestOSId());
>>           to.setOs(guestOS.getDisplayName());
>> +        HostVO host =
>> _hostDao.findById(vm.getVirtualMachine().getHostId());
>> +        GuestOSHypervisorVO guestOsMapping =
>> _guestOsHypervisorDao.findByOsIdAndHypervisor(guestOS.getId(),
>> getHypervisorType().toString(), host.getHypervisorVersion());
>> +        to.setPlatformEmulator(guestOsMapping.getGuestOsName());
>>             return to;
>>       }
>>
>>
>



-- 
Daan

Re: [2/2] git commit: updated refs/heads/4.4 to 02bd3d0

Posted by Milamber <mi...@apache.org>.
Hello,

This commit creating an NPE issue when you add a new kvm instance from ISO.

See: https://issues.apache.org/jira/browse/CLOUDSTACK-6671

Milamber


Le 13/05/2014 09:33, dahn@apache.org a ecrit :
> CLOUDSTACK-6358: As a part of supporting dynamic guest OS defined by user, removing the hard-coded dependencies.
> This patch is for KVM
>
> 1. Local testing on KVM
> 2. Successfully got up system VMs
> 3. Successfully created a CentOS VM
> 4. Snapshots are not supported for KVM
>
>   Signed off by :- Nitin Mehta<ni...@citrix.com>
>
>
> Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
> Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/02bd3d06
> Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/02bd3d06
> Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/02bd3d06
>
> Branch: refs/heads/4.4
> Commit: 02bd3d0671b0cde46f8aa7892f20aa0bb0d48d1c
> Parents: 1fb358d
> Author: Amogh Vasekar <am...@citrix.com>
> Authored: Wed May 7 15:16:55 2014 -0700
> Committer: Daan Hoogland <da...@onecht.net>
> Committed: Tue May 13 10:33:15 2014 +0200
>
> ----------------------------------------------------------------------
>   .../storage/dao/GuestOSHypervisorDaoImpl.java   |   6 +-
>   .../kvm/resource/LibvirtComputingResource.java  | 156 ++++++++++---------
>   .../hypervisor/kvm/resource/LibvirtVMDef.java   |   9 ++
>   .../hypervisor/kvm/resource/VifDriverBase.java  |   4 +-
>   server/src/com/cloud/hypervisor/KVMGuru.java    |  14 +-
>   5 files changed, 108 insertions(+), 81 deletions(-)
> ----------------------------------------------------------------------
>
>
> http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
> ----------------------------------------------------------------------
> diff --git a/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java b/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
> index 3b05120..b06cdfa 100644
> --- a/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
> +++ b/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
> @@ -58,9 +58,13 @@ public class GuestOSHypervisorDaoImpl extends GenericDaoBase<GuestOSHypervisorVO
>       @Override
>       public GuestOSHypervisorVO findByOsIdAndHypervisor(long guestOsId, String hypervisorType, String hypervisorVersion) {
>           SearchCriteria<GuestOSHypervisorVO> sc = mappingSearch.create();
> +        String version = "default";
> +        if (!(hypervisorVersion == null || hypervisorVersion.isEmpty())) {
> +            version = hypervisorVersion;
> +        }
>           sc.setParameters("guest_os_id", guestOsId);
>           sc.setParameters("hypervisor_type", hypervisorType);
> -        sc.setParameters("hypervisor_version", hypervisorVersion);
> +        sc.setParameters("hypervisor_version", version);
>           return findOneBy(sc);
>       }
>   
>
> http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
> ----------------------------------------------------------------------
> diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
> index 345a8ee..b8f33e5 100755
> --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
> +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
> @@ -16,12 +16,79 @@
>   // under the License.
>   package com.cloud.hypervisor.kvm.resource;
>   
> +import java.io.BufferedOutputStream;
> +import java.io.BufferedReader;
> +import java.io.File;
> +import java.io.FileNotFoundException;
> +import java.io.FileOutputStream;
> +import java.io.FileReader;
> +import java.io.IOException;
> +import java.io.InputStream;
> +import java.io.InputStreamReader;
> +import java.io.Reader;
> +import java.net.InetAddress;
> +import java.net.URI;
> +import java.net.URISyntaxException;
> +import java.net.URL;
> +import java.net.URLConnection;
> +import java.text.DateFormat;
> +import java.text.MessageFormat;
> +import java.text.SimpleDateFormat;
> +import java.util.ArrayList;
> +import java.util.Arrays;
> +import java.util.Calendar;
> +import java.util.Collections;
> +import java.util.Comparator;
> +import java.util.Date;
> +import java.util.HashMap;
> +import java.util.HashSet;
> +import java.util.List;
> +import java.util.Map;
> +import java.util.Properties;
> +import java.util.Set;
> +import java.util.UUID;
> +import java.util.concurrent.Callable;
> +import java.util.concurrent.ConcurrentHashMap;
> +import java.util.concurrent.ExecutionException;
> +import java.util.concurrent.ExecutorService;
> +import java.util.concurrent.Executors;
> +import java.util.concurrent.Future;
> +import java.util.concurrent.TimeUnit;
> +import java.util.concurrent.TimeoutException;
> +import java.util.regex.Matcher;
> +import java.util.regex.Pattern;
> +
> +import javax.ejb.Local;
> +import javax.naming.ConfigurationException;
> +
> +import org.apache.commons.io.FileUtils;
> +import org.apache.commons.io.IOUtils;
> +import org.apache.log4j.Logger;
> +import org.libvirt.Connect;
> +import org.libvirt.Domain;
> +import org.libvirt.DomainBlockStats;
> +import org.libvirt.DomainInfo;
> +import org.libvirt.DomainInterfaceStats;
> +import org.libvirt.DomainSnapshot;
> +import org.libvirt.LibvirtException;
> +import org.libvirt.NodeInfo;
> +import org.libvirt.StorageVol;
> +
>   import com.ceph.rados.IoCTX;
>   import com.ceph.rados.Rados;
>   import com.ceph.rados.RadosException;
>   import com.ceph.rbd.Rbd;
>   import com.ceph.rbd.RbdException;
>   import com.ceph.rbd.RbdImage;
> +
> +import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
> +import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
> +import org.apache.cloudstack.storage.to.VolumeObjectTO;
> +import org.apache.cloudstack.utils.qemu.QemuImg;
> +import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat;
> +import org.apache.cloudstack.utils.qemu.QemuImgException;
> +import org.apache.cloudstack.utils.qemu.QemuImgFile;
> +
>   import com.cloud.agent.api.Answer;
>   import com.cloud.agent.api.AttachIsoCommand;
>   import com.cloud.agent.api.AttachVolumeAnswer;
> @@ -202,71 +269,6 @@ import com.cloud.vm.VirtualMachine;
>   import com.cloud.vm.VirtualMachine.PowerState;
>   import com.cloud.vm.VirtualMachine.State;
>   
> -import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
> -import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
> -import org.apache.cloudstack.storage.to.VolumeObjectTO;
> -import org.apache.cloudstack.utils.qemu.QemuImg;
> -import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat;
> -import org.apache.cloudstack.utils.qemu.QemuImgException;
> -import org.apache.cloudstack.utils.qemu.QemuImgFile;
> -import org.apache.commons.io.FileUtils;
> -import org.apache.commons.io.IOUtils;
> -import org.apache.log4j.Logger;
> -import org.libvirt.Connect;
> -import org.libvirt.Domain;
> -import org.libvirt.DomainBlockStats;
> -import org.libvirt.DomainInfo;
> -import org.libvirt.DomainInterfaceStats;
> -import org.libvirt.DomainSnapshot;
> -import org.libvirt.LibvirtException;
> -import org.libvirt.NodeInfo;
> -import org.libvirt.StorageVol;
> -
> -import javax.ejb.Local;
> -import javax.naming.ConfigurationException;
> -
> -import java.io.BufferedOutputStream;
> -import java.io.BufferedReader;
> -import java.io.File;
> -import java.io.FileNotFoundException;
> -import java.io.FileOutputStream;
> -import java.io.FileReader;
> -import java.io.IOException;
> -import java.io.InputStream;
> -import java.io.InputStreamReader;
> -import java.io.Reader;
> -import java.net.InetAddress;
> -import java.net.URI;
> -import java.net.URISyntaxException;
> -import java.net.URL;
> -import java.net.URLConnection;
> -import java.text.DateFormat;
> -import java.text.MessageFormat;
> -import java.text.SimpleDateFormat;
> -import java.util.ArrayList;
> -import java.util.Arrays;
> -import java.util.Calendar;
> -import java.util.Collections;
> -import java.util.Comparator;
> -import java.util.Date;
> -import java.util.HashMap;
> -import java.util.HashSet;
> -import java.util.List;
> -import java.util.Map;
> -import java.util.Properties;
> -import java.util.Set;
> -import java.util.UUID;
> -import java.util.concurrent.Callable;
> -import java.util.concurrent.ConcurrentHashMap;
> -import java.util.concurrent.ExecutionException;
> -import java.util.concurrent.ExecutorService;
> -import java.util.concurrent.Executors;
> -import java.util.concurrent.Future;
> -import java.util.concurrent.TimeoutException;
> -import java.util.concurrent.TimeUnit;
> -import java.util.regex.Matcher;
> -import java.util.regex.Pattern;
> -
>   /**
>    * LibvirtComputingResource execute requests on the computing/routing host using
>    * the libvirt API
> @@ -2006,7 +2008,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
>           }
>   
>           Domain vm = getDomain(conn, vmName);
> -        vm.attachDevice(getVifDriver(nicTO.getType()).plug(nicTO, "Other PV (32-bit)").toString());
> +        vm.attachDevice(getVifDriver(nicTO.getType()).plug(nicTO, "Other PV").toString());
>       }
>   
>   
> @@ -2043,7 +2045,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
>                   }
>                   nicnum++;
>               }
> -            vm.attachDevice(getVifDriver(nic.getType()).plug(nic, "Other PV (32-bit)").toString());
> +            vm.attachDevice(getVifDriver(nic.getType()).plug(nic, "Other PV").toString());
>               return new PlugNicAnswer(cmd, true, "success");
>           } catch (LibvirtException e) {
>               String msg = " Plug Nic failed due to " + e.toString();
> @@ -3641,6 +3643,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
>           uuid = getUuid(uuid);
>           vm.setDomUUID(uuid);
>           vm.setDomDescription(vmTO.getOs());
> +        vm.setPlatformEmulator(vmTO.getPlatformEmulator());
>   
>           GuestDef guest = new GuestDef();
>   
> @@ -3924,7 +3927,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
>                   volPath = physicalDisk.getPath();
>               }
>   
> -            DiskDef.diskBus diskBusType = getGuestDiskModel(vmSpec.getOs());
> +            DiskDef.diskBus diskBusType = getGuestDiskModel(vmSpec.getPlatformEmulator());
>               DiskDef disk = new DiskDef();
>               if (volume.getType() == Volume.Type.ISO) {
>                   if (volPath == null) {
> @@ -4004,7 +4007,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
>       }
>   
>       private void createVif(LibvirtVMDef vm, NicTO nic) throws InternalErrorException, LibvirtException {
> -        vm.getDevices().addDevice(getVifDriver(nic.getType()).plug(nic, vm.getGuestOSType()).toString());
> +        vm.getDevices().addDevice(getVifDriver(nic.getType()).plug(nic, vm.getPlatformEmulator()).toString());
>       }
>   
>       protected CheckSshAnswer execute(CheckSshCommand cmd) {
> @@ -4938,16 +4941,15 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
>           }
>       }
>   
> -    boolean isGuestPVEnabled(String guestOS) {
> -        if (guestOS == null) {
> +    boolean isGuestPVEnabled(String guestOSName) {
> +        if (guestOSName == null) {
>               return false;
>           }
> -        String guestOSName = KVMGuestOsMapper.getGuestOsName(guestOS);
> -        if (guestOS.startsWith("Ubuntu") || guestOSName.startsWith("Fedora 13") || guestOSName.startsWith("Fedora 12") || guestOSName.startsWith("Fedora 11") ||
> +        if (guestOSName.startsWith("Ubuntu") || guestOSName.startsWith("Fedora 13") || guestOSName.startsWith("Fedora 12") || guestOSName.startsWith("Fedora 11") ||
>                   guestOSName.startsWith("Fedora 10") || guestOSName.startsWith("Fedora 9") || guestOSName.startsWith("CentOS 5.3") || guestOSName.startsWith("CentOS 5.4") ||
> -                guestOSName.startsWith("CentOS 5.5") || guestOS.startsWith("CentOS") || guestOS.startsWith("Fedora") ||
> +                guestOSName.startsWith("CentOS 5.5") || guestOSName.startsWith("CentOS") || guestOSName.startsWith("Fedora") ||
>                   guestOSName.startsWith("Red Hat Enterprise Linux 5.3") || guestOSName.startsWith("Red Hat Enterprise Linux 5.4") ||
> -                guestOSName.startsWith("Red Hat Enterprise Linux 5.5") || guestOSName.startsWith("Red Hat Enterprise Linux 6") || guestOS.startsWith("Debian GNU/Linux") ||
> +                guestOSName.startsWith("Red Hat Enterprise Linux 5.5") || guestOSName.startsWith("Red Hat Enterprise Linux 6") || guestOSName.startsWith("Debian GNU/Linux") ||
>                   guestOSName.startsWith("FreeBSD 10") || guestOSName.startsWith("Other PV")) {
>               return true;
>           } else {
> @@ -4963,8 +4965,8 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
>           }
>       }
>   
> -    private DiskDef.diskBus getGuestDiskModel(String guestOSType) {
> -        if (isGuestPVEnabled(guestOSType)) {
> +    private DiskDef.diskBus getGuestDiskModel(String platformEmulator) {
> +        if (isGuestPVEnabled(platformEmulator)) {
>               return DiskDef.diskBus.VIRTIO;
>           } else {
>               return DiskDef.diskBus.IDE;
>
> http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
> ----------------------------------------------------------------------
> diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
> index 4032305..f6c3edf 100644
> --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
> +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
> @@ -28,6 +28,7 @@ public class LibvirtVMDef {
>       private String _domName;
>       private String _domUUID;
>       private String _desc;
> +    private String _platformEmulator;
>       private final Map<String, Object> components = new HashMap<String, Object>();
>   
>       public static class GuestDef {
> @@ -1179,6 +1180,14 @@ public class LibvirtVMDef {
>           return _desc;
>       }
>   
> +    public void setPlatformEmulator(String platformEmulator) {
> +        _platformEmulator = platformEmulator;
> +    }
> +
> +    public String getPlatformEmulator() {
> +        return _platformEmulator;
> +    }
> +
>       public void addComp(Object comp) {
>           components.put(comp.getClass().toString(), comp);
>       }
>
> http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDriverBase.java
> ----------------------------------------------------------------------
> diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDriverBase.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDriverBase.java
> index d89d71a..53e81fd 100644
> --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDriverBase.java
> +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDriverBase.java
> @@ -47,8 +47,8 @@ public abstract class VifDriverBase implements VifDriver {
>       @Override
>       public abstract void unplug(LibvirtVMDef.InterfaceDef iface);
>   
> -    protected LibvirtVMDef.InterfaceDef.nicModel getGuestNicModel(String guestOSType) {
> -        if (_libvirtComputingResource.isGuestPVEnabled(guestOSType)) {
> +    protected LibvirtVMDef.InterfaceDef.nicModel getGuestNicModel(String platformEmulator) {
> +        if (_libvirtComputingResource.isGuestPVEnabled(platformEmulator)) {
>               return LibvirtVMDef.InterfaceDef.nicModel.VIRTIO;
>           } else {
>               return LibvirtVMDef.InterfaceDef.nicModel.E1000;
>
> http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/server/src/com/cloud/hypervisor/KVMGuru.java
> ----------------------------------------------------------------------
> diff --git a/server/src/com/cloud/hypervisor/KVMGuru.java b/server/src/com/cloud/hypervisor/KVMGuru.java
> index 174b32d..4225232 100644
> --- a/server/src/com/cloud/hypervisor/KVMGuru.java
> +++ b/server/src/com/cloud/hypervisor/KVMGuru.java
> @@ -19,19 +19,28 @@ package com.cloud.hypervisor;
>   import javax.ejb.Local;
>   import javax.inject.Inject;
>   
> +import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
> +
>   import com.cloud.agent.api.Command;
>   import com.cloud.agent.api.to.VirtualMachineTO;
> +import com.cloud.host.HostVO;
> +import com.cloud.host.dao.HostDao;
>   import com.cloud.hypervisor.Hypervisor.HypervisorType;
> +import com.cloud.storage.GuestOSHypervisorVO;
>   import com.cloud.storage.GuestOSVO;
>   import com.cloud.storage.dao.GuestOSDao;
> +import com.cloud.storage.dao.GuestOSHypervisorDao;
>   import com.cloud.utils.Pair;
>   import com.cloud.vm.VirtualMachineProfile;
> -import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
>   
>   @Local(value = HypervisorGuru.class)
>   public class KVMGuru extends HypervisorGuruBase implements HypervisorGuru {
>       @Inject
>       GuestOSDao _guestOsDao;
> +    @Inject
> +    GuestOSHypervisorDao _guestOsHypervisorDao;
> +    @Inject
> +    HostDao _hostDao;
>   
>       @Override
>       public HypervisorType getHypervisorType() {
> @@ -50,6 +59,9 @@ public class KVMGuru extends HypervisorGuruBase implements HypervisorGuru {
>           // Determine the VM's OS description
>           GuestOSVO guestOS = _guestOsDao.findById(vm.getVirtualMachine().getGuestOSId());
>           to.setOs(guestOS.getDisplayName());
> +        HostVO host = _hostDao.findById(vm.getVirtualMachine().getHostId());
> +        GuestOSHypervisorVO guestOsMapping = _guestOsHypervisorDao.findByOsIdAndHypervisor(guestOS.getId(), getHypervisorType().toString(), host.getHypervisorVersion());
> +        to.setPlatformEmulator(guestOsMapping.getGuestOsName());
>   
>           return to;
>       }
>
>


[2/2] git commit: updated refs/heads/4.4 to 02bd3d0

Posted by da...@apache.org.
CLOUDSTACK-6358: As a part of supporting dynamic guest OS defined by user, removing the hard-coded dependencies.
This patch is for KVM

1. Local testing on KVM
2. Successfully got up system VMs
3. Successfully created a CentOS VM
4. Snapshots are not supported for KVM

 Signed off by :- Nitin Mehta<ni...@citrix.com>


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/02bd3d06
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/02bd3d06
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/02bd3d06

Branch: refs/heads/4.4
Commit: 02bd3d0671b0cde46f8aa7892f20aa0bb0d48d1c
Parents: 1fb358d
Author: Amogh Vasekar <am...@citrix.com>
Authored: Wed May 7 15:16:55 2014 -0700
Committer: Daan Hoogland <da...@onecht.net>
Committed: Tue May 13 10:33:15 2014 +0200

----------------------------------------------------------------------
 .../storage/dao/GuestOSHypervisorDaoImpl.java   |   6 +-
 .../kvm/resource/LibvirtComputingResource.java  | 156 ++++++++++---------
 .../hypervisor/kvm/resource/LibvirtVMDef.java   |   9 ++
 .../hypervisor/kvm/resource/VifDriverBase.java  |   4 +-
 server/src/com/cloud/hypervisor/KVMGuru.java    |  14 +-
 5 files changed, 108 insertions(+), 81 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java b/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
index 3b05120..b06cdfa 100644
--- a/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
+++ b/engine/schema/src/com/cloud/storage/dao/GuestOSHypervisorDaoImpl.java
@@ -58,9 +58,13 @@ public class GuestOSHypervisorDaoImpl extends GenericDaoBase<GuestOSHypervisorVO
     @Override
     public GuestOSHypervisorVO findByOsIdAndHypervisor(long guestOsId, String hypervisorType, String hypervisorVersion) {
         SearchCriteria<GuestOSHypervisorVO> sc = mappingSearch.create();
+        String version = "default";
+        if (!(hypervisorVersion == null || hypervisorVersion.isEmpty())) {
+            version = hypervisorVersion;
+        }
         sc.setParameters("guest_os_id", guestOsId);
         sc.setParameters("hypervisor_type", hypervisorType);
-        sc.setParameters("hypervisor_version", hypervisorVersion);
+        sc.setParameters("hypervisor_version", version);
         return findOneBy(sc);
     }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
index 345a8ee..b8f33e5 100755
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
@@ -16,12 +16,79 @@
 // under the License.
 package com.cloud.hypervisor.kvm.resource;
 
+import java.io.BufferedOutputStream;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.net.InetAddress;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.text.DateFormat;
+import java.text.MessageFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.UUID;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.ejb.Local;
+import javax.naming.ConfigurationException;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.log4j.Logger;
+import org.libvirt.Connect;
+import org.libvirt.Domain;
+import org.libvirt.DomainBlockStats;
+import org.libvirt.DomainInfo;
+import org.libvirt.DomainInterfaceStats;
+import org.libvirt.DomainSnapshot;
+import org.libvirt.LibvirtException;
+import org.libvirt.NodeInfo;
+import org.libvirt.StorageVol;
+
 import com.ceph.rados.IoCTX;
 import com.ceph.rados.Rados;
 import com.ceph.rados.RadosException;
 import com.ceph.rbd.Rbd;
 import com.ceph.rbd.RbdException;
 import com.ceph.rbd.RbdImage;
+
+import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
+import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
+import org.apache.cloudstack.storage.to.VolumeObjectTO;
+import org.apache.cloudstack.utils.qemu.QemuImg;
+import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat;
+import org.apache.cloudstack.utils.qemu.QemuImgException;
+import org.apache.cloudstack.utils.qemu.QemuImgFile;
+
 import com.cloud.agent.api.Answer;
 import com.cloud.agent.api.AttachIsoCommand;
 import com.cloud.agent.api.AttachVolumeAnswer;
@@ -202,71 +269,6 @@ import com.cloud.vm.VirtualMachine;
 import com.cloud.vm.VirtualMachine.PowerState;
 import com.cloud.vm.VirtualMachine.State;
 
-import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
-import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
-import org.apache.cloudstack.storage.to.VolumeObjectTO;
-import org.apache.cloudstack.utils.qemu.QemuImg;
-import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat;
-import org.apache.cloudstack.utils.qemu.QemuImgException;
-import org.apache.cloudstack.utils.qemu.QemuImgFile;
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.IOUtils;
-import org.apache.log4j.Logger;
-import org.libvirt.Connect;
-import org.libvirt.Domain;
-import org.libvirt.DomainBlockStats;
-import org.libvirt.DomainInfo;
-import org.libvirt.DomainInterfaceStats;
-import org.libvirt.DomainSnapshot;
-import org.libvirt.LibvirtException;
-import org.libvirt.NodeInfo;
-import org.libvirt.StorageVol;
-
-import javax.ejb.Local;
-import javax.naming.ConfigurationException;
-
-import java.io.BufferedOutputStream;
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.net.InetAddress;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.text.DateFormat;
-import java.text.MessageFormat;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.UUID;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeoutException;
-import java.util.concurrent.TimeUnit;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
 /**
  * LibvirtComputingResource execute requests on the computing/routing host using
  * the libvirt API
@@ -2006,7 +2008,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
         }
 
         Domain vm = getDomain(conn, vmName);
-        vm.attachDevice(getVifDriver(nicTO.getType()).plug(nicTO, "Other PV (32-bit)").toString());
+        vm.attachDevice(getVifDriver(nicTO.getType()).plug(nicTO, "Other PV").toString());
     }
 
 
@@ -2043,7 +2045,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
                 }
                 nicnum++;
             }
-            vm.attachDevice(getVifDriver(nic.getType()).plug(nic, "Other PV (32-bit)").toString());
+            vm.attachDevice(getVifDriver(nic.getType()).plug(nic, "Other PV").toString());
             return new PlugNicAnswer(cmd, true, "success");
         } catch (LibvirtException e) {
             String msg = " Plug Nic failed due to " + e.toString();
@@ -3641,6 +3643,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
         uuid = getUuid(uuid);
         vm.setDomUUID(uuid);
         vm.setDomDescription(vmTO.getOs());
+        vm.setPlatformEmulator(vmTO.getPlatformEmulator());
 
         GuestDef guest = new GuestDef();
 
@@ -3924,7 +3927,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
                 volPath = physicalDisk.getPath();
             }
 
-            DiskDef.diskBus diskBusType = getGuestDiskModel(vmSpec.getOs());
+            DiskDef.diskBus diskBusType = getGuestDiskModel(vmSpec.getPlatformEmulator());
             DiskDef disk = new DiskDef();
             if (volume.getType() == Volume.Type.ISO) {
                 if (volPath == null) {
@@ -4004,7 +4007,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
     }
 
     private void createVif(LibvirtVMDef vm, NicTO nic) throws InternalErrorException, LibvirtException {
-        vm.getDevices().addDevice(getVifDriver(nic.getType()).plug(nic, vm.getGuestOSType()).toString());
+        vm.getDevices().addDevice(getVifDriver(nic.getType()).plug(nic, vm.getPlatformEmulator()).toString());
     }
 
     protected CheckSshAnswer execute(CheckSshCommand cmd) {
@@ -4938,16 +4941,15 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
         }
     }
 
-    boolean isGuestPVEnabled(String guestOS) {
-        if (guestOS == null) {
+    boolean isGuestPVEnabled(String guestOSName) {
+        if (guestOSName == null) {
             return false;
         }
-        String guestOSName = KVMGuestOsMapper.getGuestOsName(guestOS);
-        if (guestOS.startsWith("Ubuntu") || guestOSName.startsWith("Fedora 13") || guestOSName.startsWith("Fedora 12") || guestOSName.startsWith("Fedora 11") ||
+        if (guestOSName.startsWith("Ubuntu") || guestOSName.startsWith("Fedora 13") || guestOSName.startsWith("Fedora 12") || guestOSName.startsWith("Fedora 11") ||
                 guestOSName.startsWith("Fedora 10") || guestOSName.startsWith("Fedora 9") || guestOSName.startsWith("CentOS 5.3") || guestOSName.startsWith("CentOS 5.4") ||
-                guestOSName.startsWith("CentOS 5.5") || guestOS.startsWith("CentOS") || guestOS.startsWith("Fedora") ||
+                guestOSName.startsWith("CentOS 5.5") || guestOSName.startsWith("CentOS") || guestOSName.startsWith("Fedora") ||
                 guestOSName.startsWith("Red Hat Enterprise Linux 5.3") || guestOSName.startsWith("Red Hat Enterprise Linux 5.4") ||
-                guestOSName.startsWith("Red Hat Enterprise Linux 5.5") || guestOSName.startsWith("Red Hat Enterprise Linux 6") || guestOS.startsWith("Debian GNU/Linux") ||
+                guestOSName.startsWith("Red Hat Enterprise Linux 5.5") || guestOSName.startsWith("Red Hat Enterprise Linux 6") || guestOSName.startsWith("Debian GNU/Linux") ||
                 guestOSName.startsWith("FreeBSD 10") || guestOSName.startsWith("Other PV")) {
             return true;
         } else {
@@ -4963,8 +4965,8 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
         }
     }
 
-    private DiskDef.diskBus getGuestDiskModel(String guestOSType) {
-        if (isGuestPVEnabled(guestOSType)) {
+    private DiskDef.diskBus getGuestDiskModel(String platformEmulator) {
+        if (isGuestPVEnabled(platformEmulator)) {
             return DiskDef.diskBus.VIRTIO;
         } else {
             return DiskDef.diskBus.IDE;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
index 4032305..f6c3edf 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
@@ -28,6 +28,7 @@ public class LibvirtVMDef {
     private String _domName;
     private String _domUUID;
     private String _desc;
+    private String _platformEmulator;
     private final Map<String, Object> components = new HashMap<String, Object>();
 
     public static class GuestDef {
@@ -1179,6 +1180,14 @@ public class LibvirtVMDef {
         return _desc;
     }
 
+    public void setPlatformEmulator(String platformEmulator) {
+        _platformEmulator = platformEmulator;
+    }
+
+    public String getPlatformEmulator() {
+        return _platformEmulator;
+    }
+
     public void addComp(Object comp) {
         components.put(comp.getClass().toString(), comp);
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDriverBase.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDriverBase.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDriverBase.java
index d89d71a..53e81fd 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDriverBase.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/VifDriverBase.java
@@ -47,8 +47,8 @@ public abstract class VifDriverBase implements VifDriver {
     @Override
     public abstract void unplug(LibvirtVMDef.InterfaceDef iface);
 
-    protected LibvirtVMDef.InterfaceDef.nicModel getGuestNicModel(String guestOSType) {
-        if (_libvirtComputingResource.isGuestPVEnabled(guestOSType)) {
+    protected LibvirtVMDef.InterfaceDef.nicModel getGuestNicModel(String platformEmulator) {
+        if (_libvirtComputingResource.isGuestPVEnabled(platformEmulator)) {
             return LibvirtVMDef.InterfaceDef.nicModel.VIRTIO;
         } else {
             return LibvirtVMDef.InterfaceDef.nicModel.E1000;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/02bd3d06/server/src/com/cloud/hypervisor/KVMGuru.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/hypervisor/KVMGuru.java b/server/src/com/cloud/hypervisor/KVMGuru.java
index 174b32d..4225232 100644
--- a/server/src/com/cloud/hypervisor/KVMGuru.java
+++ b/server/src/com/cloud/hypervisor/KVMGuru.java
@@ -19,19 +19,28 @@ package com.cloud.hypervisor;
 import javax.ejb.Local;
 import javax.inject.Inject;
 
+import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
+
 import com.cloud.agent.api.Command;
 import com.cloud.agent.api.to.VirtualMachineTO;
+import com.cloud.host.HostVO;
+import com.cloud.host.dao.HostDao;
 import com.cloud.hypervisor.Hypervisor.HypervisorType;
+import com.cloud.storage.GuestOSHypervisorVO;
 import com.cloud.storage.GuestOSVO;
 import com.cloud.storage.dao.GuestOSDao;
+import com.cloud.storage.dao.GuestOSHypervisorDao;
 import com.cloud.utils.Pair;
 import com.cloud.vm.VirtualMachineProfile;
-import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
 
 @Local(value = HypervisorGuru.class)
 public class KVMGuru extends HypervisorGuruBase implements HypervisorGuru {
     @Inject
     GuestOSDao _guestOsDao;
+    @Inject
+    GuestOSHypervisorDao _guestOsHypervisorDao;
+    @Inject
+    HostDao _hostDao;
 
     @Override
     public HypervisorType getHypervisorType() {
@@ -50,6 +59,9 @@ public class KVMGuru extends HypervisorGuruBase implements HypervisorGuru {
         // Determine the VM's OS description
         GuestOSVO guestOS = _guestOsDao.findById(vm.getVirtualMachine().getGuestOSId());
         to.setOs(guestOS.getDisplayName());
+        HostVO host = _hostDao.findById(vm.getVirtualMachine().getHostId());
+        GuestOSHypervisorVO guestOsMapping = _guestOsHypervisorDao.findByOsIdAndHypervisor(guestOS.getId(), getHypervisorType().toString(), host.getHypervisorVersion());
+        to.setPlatformEmulator(guestOsMapping.getGuestOsName());
 
         return to;
     }