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;
}