mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	Fixed volume migrations to and fro vVols datastorewq
This commit is contained in:
		
							parent
							
								
									700ab1a5ef
								
							
						
					
					
						commit
						f825a94dc4
					
				| @ -4760,7 +4760,9 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa | ||||
|         VmwareHypervisorHost hyperHost = getHyperHost(getServiceContext()); | ||||
|         VirtualMachineMO vmMo = null; | ||||
|         DatastoreMO dsMo = null; | ||||
|         DatastoreMO destinationDsMo = null; | ||||
|         ManagedObjectReference morSourceDS = null; | ||||
|         ManagedObjectReference morDestintionDS = null; | ||||
|         String vmdkDataStorePath = null; | ||||
| 
 | ||||
|         String vmName = null; | ||||
| @ -4768,15 +4770,21 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa | ||||
|             // OfflineVmwareMigration: we need to refactor the worker vm creation out for use in migration methods as well as here | ||||
|             // OfflineVmwareMigration: this method is 100 lines and needs refactorring anyway | ||||
|             // we need to spawn a worker VM to attach the volume to and move it | ||||
|             vmName = getWorkerName(getServiceContext(), cmd, 0, dsMo); | ||||
|             morSourceDS = HypervisorHostHelper.findDatastoreWithBackwardsCompatibility(hyperHost, cmd.getSourcePool().getUuid()); | ||||
|             dsMo = new DatastoreMO(hyperHost.getContext(), morSourceDS); | ||||
|             morDestintionDS = HypervisorHostHelper.findDatastoreWithBackwardsCompatibility(hyperHost, cmd.getTargetPool().getUuid()); | ||||
|             destinationDsMo = new DatastoreMO(hyperHost.getContext(), morDestintionDS); | ||||
|             if (dsMo.getDatastoreType().equalsIgnoreCase("VVOL")) | ||||
|                 vmName = getWorkerName(getServiceContext(), cmd, 0, dsMo); | ||||
| 
 | ||||
|             if (destinationDsMo.getDatastoreType().equalsIgnoreCase("VVOL")) | ||||
|                 vmName = getWorkerName(getServiceContext(), cmd, 0, destinationDsMo); | ||||
| 
 | ||||
|             // OfflineVmwareMigration: refactor for re-use | ||||
|             // OfflineVmwareMigration: 1. find data(store) | ||||
|             // OfflineVmwareMigration: more robust would be to find the store given the volume as it might have been moved out of band or due to error | ||||
| // example:            DatastoreMO existingVmDsMo = new DatastoreMO(dcMo.getContext(), dcMo.findDatastore(fileInDatastore.getDatastoreName())); | ||||
| 
 | ||||
|             morSourceDS = HypervisorHostHelper.findDatastoreWithBackwardsCompatibility(hyperHost, cmd.getSourcePool().getUuid()); | ||||
|             dsMo = new DatastoreMO(hyperHost.getContext(), morSourceDS); | ||||
|             s_logger.info("Create worker VM " + vmName); | ||||
|             // OfflineVmwareMigration: 2. create the worker with access to the data(store) | ||||
|             vmMo = HypervisorHostHelper.createWorkerVM(hyperHost, dsMo, vmName, null); | ||||
|  | ||||
| @ -989,7 +989,7 @@ public class VmwareStorageProcessor implements StorageProcessor { | ||||
|             volumeName = srcVolumePath.substring(index + 1); | ||||
|         } | ||||
| 
 | ||||
|         String newVolume = VmwareHelper.getVCenterSafeUuid(); | ||||
|         String newVolume = VmwareHelper.getVCenterSafeUuid(dsMo); | ||||
|         restoreVolumeFromSecStorage(hyperHost, dsMo, newVolume, secStorageUrl, volumeFolder, volumeName, wait, nfsVersion); | ||||
| 
 | ||||
|         return new Pair<>(volumeFolder, newVolume); | ||||
| @ -3590,7 +3590,6 @@ public class VmwareStorageProcessor implements StorageProcessor { | ||||
|         String backupPath = backedUpSnapshotUuid.substring(0, index); | ||||
|         backedUpSnapshotUuid = backedUpSnapshotUuid.substring(index + 1); | ||||
|         String details; | ||||
|         String newVolumeName = VmwareHelper.getVCenterSafeUuid(); | ||||
| 
 | ||||
|         VmwareContext context = hostService.getServiceContext(cmd); | ||||
|         try { | ||||
| @ -3602,13 +3601,14 @@ public class VmwareStorageProcessor implements StorageProcessor { | ||||
|                 throw new Exception(msg); | ||||
|             } | ||||
| 
 | ||||
|             DatastoreMO primaryDsMo = new DatastoreMO(hyperHost.getContext(), morPrimaryDs); | ||||
|             String newVolumeName = VmwareHelper.getVCenterSafeUuid(primaryDsMo); | ||||
|             // strip off the extension since restoreVolumeFromSecStorage internally will append suffix there. | ||||
|             if (backedUpSnapshotUuid.endsWith(".ova")){ | ||||
|                 backedUpSnapshotUuid = backedUpSnapshotUuid.replace(".ova", ""); | ||||
|             } else if (backedUpSnapshotUuid.endsWith(".ovf")){ | ||||
|                 backedUpSnapshotUuid = backedUpSnapshotUuid.replace(".ovf", ""); | ||||
|             } | ||||
|             DatastoreMO primaryDsMo = new DatastoreMO(hyperHost.getContext(), morPrimaryDs); | ||||
|             restoreVolumeFromSecStorage(hyperHost, primaryDsMo, newVolumeName, secondaryStorageUrl, backupPath, backedUpSnapshotUuid, (long)cmd.getWait() * 1000, _nfsVersion); | ||||
| 
 | ||||
|             VolumeObjectTO newVol = new VolumeObjectTO(); | ||||
|  | ||||
| @ -406,6 +406,8 @@ public class DatastoreMO extends BaseMO { | ||||
|                     s_logger.info("Found file " + fileName + " in datastore at " + absoluteFileName); | ||||
|                     if (parentFolderPath.endsWith("]")) | ||||
|                         absoluteFileName += " "; | ||||
|                     else if (!parentFolderPath.endsWith("/")) | ||||
|                         absoluteFileName +="/"; | ||||
|                     absoluteFileName += fi.getPath(); | ||||
|                     if(isValidCloudStackFolderPath(parentFolderPath, searchExcludedFolders)) { | ||||
|                         return absoluteFileName; | ||||
|  | ||||
| @ -76,7 +76,9 @@ import com.vmware.vim25.VirtualVmxnet2; | ||||
| import com.vmware.vim25.VirtualVmxnet3; | ||||
| 
 | ||||
| import com.cloud.hypervisor.vmware.mo.DiskControllerType; | ||||
| import com.cloud.hypervisor.vmware.mo.DatastoreMO; | ||||
| import com.cloud.hypervisor.vmware.mo.HostMO; | ||||
| import com.cloud.hypervisor.vmware.mo.CustomFieldConstants; | ||||
| import com.cloud.hypervisor.vmware.mo.LicenseAssignmentManagerMO; | ||||
| import com.cloud.hypervisor.vmware.mo.VirtualEthernetCardType; | ||||
| import com.cloud.hypervisor.vmware.mo.VirtualMachineMO; | ||||
| @ -692,9 +694,13 @@ public class VmwareHelper { | ||||
|         return hotplugSupportedByLicense; | ||||
|     } | ||||
| 
 | ||||
|     public static String getVCenterSafeUuid() { | ||||
|     public static String getVCenterSafeUuid(DatastoreMO dsMo) throws Exception{ | ||||
|         // Object name that is greater than 32 is not safe in vCenter | ||||
|         return UUID.randomUUID().toString().replaceAll("-", ""); | ||||
|         String uuid = UUID.randomUUID().toString().replaceAll("-", ""); | ||||
|         if (dsMo.getDatastoreType().equalsIgnoreCase("VVOL")) { | ||||
|             return CustomFieldConstants.CLOUD_UUID + "-" + uuid; | ||||
|         } | ||||
|         return uuid; | ||||
|     } | ||||
| 
 | ||||
|     public static String getRecommendedDiskControllerFromDescriptor(GuestOsDescriptor guestOsDescriptor) throws Exception { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user