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

Reply via email to