mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	CLOUDSTACK-4946. VM Restore with template id/Volatile VM feature doesnt work on VMware
When a ROOT volume is created from base template, if a folder already exists for the ROOT volume's VM then replace the old ROOT disk files with the new one.
This commit is contained in:
		
							parent
							
								
									03830c570e
								
							
						
					
					
						commit
						7116268f33
					
				| @ -345,11 +345,6 @@ public class VmwareStorageProcessor implements StorageProcessor { | |||||||
|                         vmMo.createDisk(volumeDatastorePath, (int) (volume.getSize() / (1024L * 1024L)), morDatastore, -1); |                         vmMo.createDisk(volumeDatastorePath, (int) (volume.getSize() / (1024L * 1024L)), morDatastore, -1); | ||||||
|                         vmMo.detachDisk(volumeDatastorePath, false); |                         vmMo.detachDisk(volumeDatastorePath, false); | ||||||
|                     } |                     } | ||||||
| 
 |  | ||||||
|                     VolumeObjectTO newVol = new VolumeObjectTO(); |  | ||||||
|                     newVol.setPath(vmdkName); |  | ||||||
|                     newVol.setSize(volume.getSize()); |  | ||||||
|                     return new CopyCmdAnswer(newVol); |  | ||||||
|                 } finally { |                 } finally { | ||||||
|                     vmMo.detachAllDisks(); |                     vmMo.detachAllDisks(); | ||||||
| 
 | 
 | ||||||
| @ -383,11 +378,19 @@ public class VmwareStorageProcessor implements StorageProcessor { | |||||||
| 
 | 
 | ||||||
|                 String srcFile = dsMo.getDatastorePath(vmdkName, true); |                 String srcFile = dsMo.getDatastorePath(vmdkName, true); | ||||||
|                 dsMo.deleteFile(srcFile, dcMo.getMor(), true); |                 dsMo.deleteFile(srcFile, dcMo.getMor(), true); | ||||||
|  |             } | ||||||
|  |             // restoreVM - move the new ROOT disk into corresponding VM folder | ||||||
|  |             String vmInternalCSName = volume.getVmName(); | ||||||
|  |             if (dsMo.folderExists(String.format("[%s]", dsMo.getName()), vmInternalCSName)) { | ||||||
|  |                 String oldRootDisk = VmwareStorageLayoutHelper.getVmwareDatastorePathFromVmdkFileName(dsMo, vmInternalCSName, vmdkName); | ||||||
|  |                 if (oldRootDisk != null) | ||||||
|  |                     VmwareStorageLayoutHelper.syncVolumeToVmDefaultFolder(dcMo, vmInternalCSName, dsMo, vmdkName); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|             VolumeObjectTO newVol = new VolumeObjectTO(); |             VolumeObjectTO newVol = new VolumeObjectTO(); | ||||||
|             newVol.setPath(vmdkName); |             newVol.setPath(vmdkName); | ||||||
|             newVol.setSize(volume.getSize()); |             newVol.setSize(volume.getSize()); | ||||||
|             return new CopyCmdAnswer(newVol); |             return new CopyCmdAnswer(newVol); | ||||||
|             } |  | ||||||
|         } catch (Throwable e) { |         } catch (Throwable e) { | ||||||
|             if (e instanceof RemoteException) { |             if (e instanceof RemoteException) { | ||||||
|                 s_logger.warn("Encounter remote exception to vCenter, invalidate VMware session context"); |                 s_logger.warn("Encounter remote exception to vCenter, invalidate VMware session context"); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user