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