mirror of https://github.com/apache/cloudstack.git
CLOUDSTACK-6358: Add missing patches in master for KVM
This commit is contained in:
parent
6831ed4026
commit
09069fcc87
|
|
@ -66,9 +66,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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -2013,7 +2015,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());
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -2050,7 +2052,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();
|
||||
|
|
@ -3648,6 +3650,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();
|
||||
|
||||
|
|
@ -3961,9 +3964,8 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
|
|||
}
|
||||
|
||||
if (diskBusType == null) {
|
||||
diskBusType = getGuestDiskModel(vmSpec.getOs());
|
||||
diskBusType = getGuestDiskModel(vmSpec.getPlatformEmulator());
|
||||
}
|
||||
|
||||
DiskDef disk = new DiskDef();
|
||||
if (volume.getType() == Volume.Type.ISO) {
|
||||
if (volPath == null) {
|
||||
|
|
@ -4043,7 +4045,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
|
|||
}
|
||||
|
||||
private void createVif(LibvirtVMDef vm, NicTO nic, String nicAdapter) throws InternalErrorException, LibvirtException {
|
||||
vm.getDevices().addDevice(getVifDriver(nic.getType()).plug(nic, vm.getGuestOSType(), nicAdapter).toString());
|
||||
vm.getDevices().addDevice(getVifDriver(nic.getType()).plug(nic, vm.getPlatformEmulator().toString(), nicAdapter).toString());
|
||||
}
|
||||
|
||||
protected CheckSshAnswer execute(CheckSshCommand cmd) {
|
||||
|
|
@ -4977,16 +4979,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 {
|
||||
|
|
@ -5002,8 +5003,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;
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
@ -1197,6 +1198,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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ public abstract class VifDriverBase implements VifDriver {
|
|||
@Override
|
||||
public abstract void unplug(LibvirtVMDef.InterfaceDef iface);
|
||||
|
||||
protected LibvirtVMDef.InterfaceDef.nicModel getGuestNicModel(String guestOSType, String nicAdapter) {
|
||||
protected LibvirtVMDef.InterfaceDef.nicModel getGuestNicModel(String platformEmulator, String nicAdapter) {
|
||||
// if nicAdapter is found in ENUM, use it. Otherwise, match guest OS type as before
|
||||
if (nicAdapter != null && !nicAdapter.isEmpty()) {
|
||||
for (LibvirtVMDef.InterfaceDef.nicModel model : LibvirtVMDef.InterfaceDef.nicModel.values()) {
|
||||
|
|
@ -57,7 +57,7 @@ public abstract class VifDriverBase implements VifDriver {
|
|||
}
|
||||
}
|
||||
|
||||
if (_libvirtComputingResource.isGuestPVEnabled(guestOSType)) {
|
||||
if (_libvirtComputingResource.isGuestPVEnabled(platformEmulator)) {
|
||||
return LibvirtVMDef.InterfaceDef.nicModel.VIRTIO;
|
||||
} else {
|
||||
return LibvirtVMDef.InterfaceDef.nicModel.E1000;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue