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 <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.


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" <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