mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
[Merge 4.11] CLOUDSTACK-10232: SystemVMs and VR to run as HVM on XenServer (#2465)
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
This commit is contained in:
commit
8f881ce08b
@ -287,6 +287,11 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
|
||||
|
||||
protected StorageSubsystemCommandHandler storageHandler;
|
||||
|
||||
private static final String XENSTORE_DATA_IP = "vm-data/ip";
|
||||
private static final String XENSTORE_DATA_GATEWAY = "vm-data/gateway";
|
||||
private static final String XENSTORE_DATA_NETMASK = "vm-data/netmask";
|
||||
private static final String XENSTORE_DATA_CS_INIT = "vm-data/cloudstack/init";
|
||||
|
||||
public CitrixResourceBase() {
|
||||
}
|
||||
|
||||
@ -1285,7 +1290,6 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
|
||||
if (guestOsDetails.containsKey("xenserver.dynamicMax")) {
|
||||
recommendedMemoryMax = Long.valueOf(guestOsDetails.get("xenserver.dynamicMax")).longValue();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (isDmcEnabled(conn, host) && vmSpec.isEnableDynamicallyScaleVm()) {
|
||||
@ -1309,7 +1313,6 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
|
||||
vmr.memoryStaticMin = vmSpec.getMinRam();
|
||||
vmr.memoryStaticMax = vmSpec.getMaxRam();
|
||||
vmr.memoryDynamicMin = vmSpec.getMinRam();
|
||||
;
|
||||
vmr.memoryDynamicMax = vmSpec.getMaxRam();
|
||||
|
||||
vmr.VCPUsMax = (long)vmSpec.getCpus();
|
||||
@ -1323,17 +1326,15 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
|
||||
NicTO mgmtNic = vmSpec.getNics()[0];
|
||||
if (mgmtNic != null) {
|
||||
Map<String, String> xenstoreData = new HashMap<String, String>(3);
|
||||
xenstoreData.put("vm-data/ip", mgmtNic.getIp().toString().trim());
|
||||
xenstoreData.put("vm-data/gateway", mgmtNic.getGateway().toString().trim());
|
||||
xenstoreData.put("vm-data/netmask", mgmtNic.getNetmask().toString().trim());
|
||||
xenstoreData.put(XENSTORE_DATA_IP, mgmtNic.getIp().toString().trim());
|
||||
xenstoreData.put(XENSTORE_DATA_GATEWAY, mgmtNic.getGateway().toString().trim());
|
||||
xenstoreData.put(XENSTORE_DATA_NETMASK, mgmtNic.getNetmask().toString().trim());
|
||||
vmr.xenstoreData = xenstoreData;
|
||||
}
|
||||
}
|
||||
|
||||
final VM vm = VM.create(conn, vmr);
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Created VM " + vm.getUuid(conn) + " for " + vmSpec.getName());
|
||||
}
|
||||
s_logger.debug("Created VM " + vm.getUuid(conn) + " for " + vmSpec.getName());
|
||||
|
||||
final Map<String, String> vcpuParams = new HashMap<String, String>();
|
||||
|
||||
@ -1365,12 +1366,18 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
|
||||
|
||||
final String bootArgs = vmSpec.getBootArgs();
|
||||
if (bootArgs != null && bootArgs.length() > 0) {
|
||||
// send boot args for PV instances
|
||||
String pvargs = vm.getPVArgs(conn);
|
||||
pvargs = pvargs + vmSpec.getBootArgs().replaceAll(" ", "%");
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("PV args are " + pvargs);
|
||||
}
|
||||
vm.setPVArgs(conn, pvargs);
|
||||
s_logger.debug("PV args are " + pvargs);
|
||||
|
||||
// send boot args into xenstore-data for HVM instances
|
||||
Map<String, String> xenstoreData = new HashMap<>();
|
||||
|
||||
xenstoreData.put(XENSTORE_DATA_CS_INIT, bootArgs);
|
||||
vm.setXenstoreData(conn, xenstoreData);
|
||||
s_logger.debug("HVM args are " + bootArgs);
|
||||
}
|
||||
|
||||
if (!(guestOsTypeName.startsWith("Windows") || guestOsTypeName.startsWith("Citrix") || guestOsTypeName.startsWith("Other"))) {
|
||||
|
||||
@ -42,7 +42,14 @@ hypervisor() {
|
||||
grep -q QEMU /var/log/messages && echo "kvm" && return 0
|
||||
|
||||
[ -d /proc/xen ] && mount -t xenfs none /proc/xen
|
||||
[ -d /proc/xen ] && echo "xen-domU" && return 0
|
||||
if [ -d /proc/xen ]; then
|
||||
$(dmesg | grep -q "Xen HVM")
|
||||
if [ $? -eq 0 ]; then # 1=PV,0=HVM
|
||||
echo "xen-hvm" && return 0
|
||||
else
|
||||
echo "xen-pv" && return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
vmware-checkvm &> /dev/null && echo "vmware" && return 0
|
||||
|
||||
@ -64,10 +71,17 @@ config_guest() {
|
||||
|
||||
get_boot_params() {
|
||||
case $HYPERVISOR in
|
||||
xen-domU|xen-hvm)
|
||||
xen-pv)
|
||||
cat /proc/cmdline > $CMDLINE
|
||||
sed -i "s/%/ /g" $CMDLINE
|
||||
;;
|
||||
xen-hvm)
|
||||
if [ ! -f /usr/sbin/xenstore-read ]; then
|
||||
log_it "ERROR: xentools not installed, cannot found xenstore-read" && exit 5
|
||||
fi
|
||||
/usr/sbin/xenstore-read vm-data/cloudstack/init > /var/cache/cloud/cmdline
|
||||
sed -i "s/%/ /g" /var/cache/cloud/cmdline
|
||||
;;
|
||||
kvm)
|
||||
VPORT=$(find /dev/virtio-ports -type l -name '*.vport' 2>/dev/null|head -1)
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user