adding Milamber back in the addresslist. On Fri, May 16, 2014 at 7:43 PM, Amogh Vasekar <amogh.vase...@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" <daan.hoogl...@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 <milam...@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, d...@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<nitin.me...@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 <amogh.vase...@citrix.com> >>>> Authored: Wed May 7 15:16:55 2014 -0700 >>>> Committer: Daan Hoogland <d...@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