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; |     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() { |     public CitrixResourceBase() { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -1285,7 +1290,6 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe | |||||||
|             if (guestOsDetails.containsKey("xenserver.dynamicMax")) { |             if (guestOsDetails.containsKey("xenserver.dynamicMax")) { | ||||||
|                 recommendedMemoryMax = Long.valueOf(guestOsDetails.get("xenserver.dynamicMax")).longValue(); |                 recommendedMemoryMax = Long.valueOf(guestOsDetails.get("xenserver.dynamicMax")).longValue(); | ||||||
|             } |             } | ||||||
| 
 |  | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if (isDmcEnabled(conn, host) && vmSpec.isEnableDynamicallyScaleVm()) { |         if (isDmcEnabled(conn, host) && vmSpec.isEnableDynamicallyScaleVm()) { | ||||||
| @ -1309,7 +1313,6 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe | |||||||
|             vmr.memoryStaticMin = vmSpec.getMinRam(); |             vmr.memoryStaticMin = vmSpec.getMinRam(); | ||||||
|             vmr.memoryStaticMax = vmSpec.getMaxRam(); |             vmr.memoryStaticMax = vmSpec.getMaxRam(); | ||||||
|             vmr.memoryDynamicMin = vmSpec.getMinRam(); |             vmr.memoryDynamicMin = vmSpec.getMinRam(); | ||||||
|             ; |  | ||||||
|             vmr.memoryDynamicMax = vmSpec.getMaxRam(); |             vmr.memoryDynamicMax = vmSpec.getMaxRam(); | ||||||
| 
 | 
 | ||||||
|             vmr.VCPUsMax = (long)vmSpec.getCpus(); |             vmr.VCPUsMax = (long)vmSpec.getCpus(); | ||||||
| @ -1323,17 +1326,15 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe | |||||||
|             NicTO mgmtNic = vmSpec.getNics()[0]; |             NicTO mgmtNic = vmSpec.getNics()[0]; | ||||||
|             if (mgmtNic != null) { |             if (mgmtNic != null) { | ||||||
|                 Map<String, String> xenstoreData = new HashMap<String, String>(3); |                 Map<String, String> xenstoreData = new HashMap<String, String>(3); | ||||||
|                 xenstoreData.put("vm-data/ip", mgmtNic.getIp().toString().trim()); |                 xenstoreData.put(XENSTORE_DATA_IP, mgmtNic.getIp().toString().trim()); | ||||||
|                 xenstoreData.put("vm-data/gateway", mgmtNic.getGateway().toString().trim()); |                 xenstoreData.put(XENSTORE_DATA_GATEWAY, mgmtNic.getGateway().toString().trim()); | ||||||
|                 xenstoreData.put("vm-data/netmask", mgmtNic.getNetmask().toString().trim()); |                 xenstoreData.put(XENSTORE_DATA_NETMASK, mgmtNic.getNetmask().toString().trim()); | ||||||
|                 vmr.xenstoreData = xenstoreData; |                 vmr.xenstoreData = xenstoreData; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         final VM vm = VM.create(conn, vmr); |         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>(); |         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(); |         final String bootArgs = vmSpec.getBootArgs(); | ||||||
|         if (bootArgs != null && bootArgs.length() > 0) { |         if (bootArgs != null && bootArgs.length() > 0) { | ||||||
|  |             // send boot args for PV instances | ||||||
|             String pvargs = vm.getPVArgs(conn); |             String pvargs = vm.getPVArgs(conn); | ||||||
|             pvargs = pvargs + vmSpec.getBootArgs().replaceAll(" ", "%"); |             pvargs = pvargs + vmSpec.getBootArgs().replaceAll(" ", "%"); | ||||||
|             if (s_logger.isDebugEnabled()) { |  | ||||||
|                 s_logger.debug("PV args are " + pvargs); |  | ||||||
|             } |  | ||||||
|             vm.setPVArgs(conn, 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"))) { |         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 |   grep -q QEMU /var/log/messages && echo "kvm" && return 0 | ||||||
| 
 | 
 | ||||||
|   [ -d /proc/xen ] && mount -t xenfs none /proc/xen |   [ -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 |   vmware-checkvm &> /dev/null && echo "vmware" && return 0 | ||||||
| 
 | 
 | ||||||
| @ -64,10 +71,17 @@ config_guest() { | |||||||
| 
 | 
 | ||||||
| get_boot_params() { | get_boot_params() { | ||||||
|   case $HYPERVISOR in |   case $HYPERVISOR in | ||||||
|      xen-domU|xen-hvm) |      xen-pv) | ||||||
|           cat /proc/cmdline > $CMDLINE |           cat /proc/cmdline > $CMDLINE | ||||||
|           sed -i "s/%/ /g" $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) |      kvm) | ||||||
|           VPORT=$(find /dev/virtio-ports -type l -name '*.vport' 2>/dev/null|head -1) |           VPORT=$(find /dev/virtio-ports -type l -name '*.vport' 2>/dev/null|head -1) | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user