mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	vmware: Create fcd folder on local storage in VMware vSphere (#5057)
This PR fixes the issue of missing fcd folder in local storage in case of VMware vSphere. with this fix, a folder with name fcd is created whenever local storage is initiated.
This commit is contained in:
		
							parent
							
								
									704b24e68f
								
							
						
					
					
						commit
						5a841159c5
					
				| @ -5243,12 +5243,12 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa | |||||||
|                     answer.setLocalDatastoreName(morDatastore.getValue()); |                     answer.setLocalDatastoreName(morDatastore.getValue()); | ||||||
| 
 | 
 | ||||||
|                     childDsMo.setCustomFieldValue(CustomFieldConstants.CLOUD_UUID, uuid); |                     childDsMo.setCustomFieldValue(CustomFieldConstants.CLOUD_UUID, uuid); | ||||||
|                     HypervisorHostHelper.createBaseFolderInDatastore(childDsMo, hyperHost); |                     HypervisorHostHelper.createBaseFolderInDatastore(childDsMo, hyperHost.getHyperHostDatacenter()); | ||||||
| 
 | 
 | ||||||
|                     childDatastoresModifyStoragePoolAnswers.add(answer); |                     childDatastoresModifyStoragePoolAnswers.add(answer); | ||||||
|                 } |                 } | ||||||
|             } else { |             } else { | ||||||
|                 HypervisorHostHelper.createBaseFolderInDatastore(dsMo, hyperHost); |                 HypervisorHostHelper.createBaseFolderInDatastore(dsMo, hyperHost.getHyperHostDatacenter()); | ||||||
| 
 | 
 | ||||||
|                 DatastoreSummary summary = dsMo.getDatastoreSummary(); |                 DatastoreSummary summary = dsMo.getDatastoreSummary(); | ||||||
|                 capacity = summary.getCapacity(); |                 capacity = summary.getCapacity(); | ||||||
| @ -6183,6 +6183,8 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa | |||||||
|                         dsMo.setCustomFieldValue(CustomFieldConstants.CLOUD_UUID, poolUuid); |                         dsMo.setCustomFieldValue(CustomFieldConstants.CLOUD_UUID, poolUuid); | ||||||
|                     } |                     } | ||||||
| 
 | 
 | ||||||
|  |                     HypervisorHostHelper.createBaseFolder(dsMo, hyperHost, StoragePoolType.VMFS); | ||||||
|  | 
 | ||||||
|                     DatastoreSummary dsSummary = dsMo.getDatastoreSummary(); |                     DatastoreSummary dsSummary = dsMo.getDatastoreSummary(); | ||||||
|                     String address = hostMo.getHostName(); |                     String address = hostMo.getHostName(); | ||||||
|                     StoragePoolInfo pInfo = new StoragePoolInfo(poolUuid, address, dsMo.getMor().getValue(), "", StoragePoolType.VMFS, dsSummary.getCapacity(), |                     StoragePoolInfo pInfo = new StoragePoolInfo(poolUuid, address, dsMo.getMor().getValue(), "", StoragePoolType.VMFS, dsSummary.getCapacity(), | ||||||
|  | |||||||
| @ -263,6 +263,7 @@ public class VmwareStorageLayoutHelper implements Configurable { | |||||||
|                 s_logger.info("Check if we need to move " + fileFullDsPath + " to its root location"); |                 s_logger.info("Check if we need to move " + fileFullDsPath + " to its root location"); | ||||||
|                 DatastoreMO dsMo = new DatastoreMO(dcMo.getContext(), dcMo.findDatastore(file.getDatastoreName())); |                 DatastoreMO dsMo = new DatastoreMO(dcMo.getContext(), dcMo.findDatastore(file.getDatastoreName())); | ||||||
|                 if (dsMo.getMor() != null && !dsMo.getDatastoreType().equalsIgnoreCase("VVOL")) { |                 if (dsMo.getMor() != null && !dsMo.getDatastoreType().equalsIgnoreCase("VVOL")) { | ||||||
|  |                     HypervisorHostHelper.createBaseFolderInDatastore(dsMo, dsMo.getDataCenterMor()); | ||||||
|                     DatastoreFile targetFile = new DatastoreFile(file.getDatastoreName(), HypervisorHostHelper.VSPHERE_DATASTORE_BASE_FOLDER, file.getFileName()); |                     DatastoreFile targetFile = new DatastoreFile(file.getDatastoreName(), HypervisorHostHelper.VSPHERE_DATASTORE_BASE_FOLDER, file.getFileName()); | ||||||
|                     if (!targetFile.getPath().equalsIgnoreCase(file.getPath())) { |                     if (!targetFile.getPath().equalsIgnoreCase(file.getPath())) { | ||||||
|                         s_logger.info("Move " + file.getPath() + " -> " + targetFile.getPath()); |                         s_logger.info("Move " + file.getPath() + " -> " + targetFile.getPath()); | ||||||
| @ -370,6 +371,7 @@ public class VmwareStorageLayoutHelper implements Configurable { | |||||||
| 
 | 
 | ||||||
|     //This method call is for the volumes which actually exists |     //This method call is for the volumes which actually exists | ||||||
|     public static String getLegacyDatastorePathFromVmdkFileName(DatastoreMO dsMo, String vmdkFileName) throws Exception { |     public static String getLegacyDatastorePathFromVmdkFileName(DatastoreMO dsMo, String vmdkFileName) throws Exception { | ||||||
|  |         HypervisorHostHelper.createBaseFolderInDatastore(dsMo, dsMo.getDataCenterMor()); | ||||||
|         String vmdkDatastorePath = String.format("[%s] %s/%s", dsMo.getName(), HypervisorHostHelper.VSPHERE_DATASTORE_BASE_FOLDER, vmdkFileName); |         String vmdkDatastorePath = String.format("[%s] %s/%s", dsMo.getName(), HypervisorHostHelper.VSPHERE_DATASTORE_BASE_FOLDER, vmdkFileName); | ||||||
|         if (!dsMo.fileExists(vmdkDatastorePath)) { |         if (!dsMo.fileExists(vmdkDatastorePath)) { | ||||||
|             vmdkDatastorePath = getDeprecatedLegacyDatastorePathFromVmdkFileName(dsMo, vmdkFileName); |             vmdkDatastorePath = getDeprecatedLegacyDatastorePathFromVmdkFileName(dsMo, vmdkFileName); | ||||||
| @ -379,6 +381,7 @@ public class VmwareStorageLayoutHelper implements Configurable { | |||||||
| 
 | 
 | ||||||
|     //This method call is for the volumes to be created or can also be for volumes already exists |     //This method call is for the volumes to be created or can also be for volumes already exists | ||||||
|     public static String getDatastorePathBaseFolderFromVmdkFileName(DatastoreMO dsMo, String vmdkFileName) throws Exception { |     public static String getDatastorePathBaseFolderFromVmdkFileName(DatastoreMO dsMo, String vmdkFileName) throws Exception { | ||||||
|  |         HypervisorHostHelper.createBaseFolderInDatastore(dsMo, dsMo.getDataCenterMor()); | ||||||
|         return String.format("[%s] %s/%s", dsMo.getName(), HypervisorHostHelper.VSPHERE_DATASTORE_BASE_FOLDER, vmdkFileName); |         return String.format("[%s] %s/%s", dsMo.getName(), HypervisorHostHelper.VSPHERE_DATASTORE_BASE_FOLDER, vmdkFileName); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -3772,6 +3772,7 @@ public class VmwareStorageProcessor implements StorageProcessor { | |||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             if(!primaryDsMo.getDatastoreType().equalsIgnoreCase("VVOL")) { |             if(!primaryDsMo.getDatastoreType().equalsIgnoreCase("VVOL")) { | ||||||
|  |                 HypervisorHostHelper.createBaseFolderInDatastore(primaryDsMo, primaryDsMo.getDataCenterMor()); | ||||||
|                 clonedVm.moveAllVmDiskFiles(primaryDsMo, HypervisorHostHelper.VSPHERE_DATASTORE_BASE_FOLDER, false); |                 clonedVm.moveAllVmDiskFiles(primaryDsMo, HypervisorHostHelper.VSPHERE_DATASTORE_BASE_FOLDER, false); | ||||||
|             } |             } | ||||||
|             clonedVm.detachAllDisks(); |             clonedVm.detachAllDisks(); | ||||||
|  | |||||||
| @ -67,6 +67,10 @@ public class DatastoreMO extends BaseMO { | |||||||
|         return (DatastoreSummary)_context.getVimClient().getDynamicProperty(_mor, "summary"); |         return (DatastoreSummary)_context.getVimClient().getDynamicProperty(_mor, "summary"); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     public ManagedObjectReference getDataCenterMor() throws Exception { | ||||||
|  |         return getOwnerDatacenter().first().getMor(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     public HostDatastoreBrowserMO getHostDatastoreBrowserMO() throws Exception { |     public HostDatastoreBrowserMO getHostDatastoreBrowserMO() throws Exception { | ||||||
|         return new HostDatastoreBrowserMO(_context, (ManagedObjectReference)_context.getVimClient().getDynamicProperty(_mor, "browser")); |         return new HostDatastoreBrowserMO(_context, (ManagedObjectReference)_context.getVimClient().getDynamicProperty(_mor, "browser")); | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -890,7 +890,7 @@ public class HostMO extends BaseMO implements VmwareHypervisorHost { | |||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if (dsMo != null && !"StoragePod".equals(morDatastore.getType()) && createBaseFolder) { |         if (dsMo != null && !"StoragePod".equals(morDatastore.getType()) && createBaseFolder) { | ||||||
|             HypervisorHostHelper.createBaseFolderInDatastore(dsMo, this); |             HypervisorHostHelper.createBaseFolderInDatastore(dsMo, this.getHyperHostDatacenter()); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if (s_logger.isTraceEnabled()) |         if (s_logger.isTraceEnabled()) | ||||||
|  | |||||||
| @ -2234,23 +2234,23 @@ public class HypervisorHostHelper { | |||||||
|             List<ManagedObjectReference> datastoresInCluster = storagepodMO.getDatastoresInDatastoreCluster(); |             List<ManagedObjectReference> datastoresInCluster = storagepodMO.getDatastoresInDatastoreCluster(); | ||||||
|             for (ManagedObjectReference datastore : datastoresInCluster) { |             for (ManagedObjectReference datastore : datastoresInCluster) { | ||||||
|                 DatastoreMO childDsMo = new DatastoreMO(hyperHost.getContext(), datastore); |                 DatastoreMO childDsMo = new DatastoreMO(hyperHost.getContext(), datastore); | ||||||
|                 createBaseFolderInDatastore(childDsMo, hyperHost); |                 createBaseFolderInDatastore(childDsMo, hyperHost.getHyperHostDatacenter()); | ||||||
|             } |             } | ||||||
|         } else { |         } else { | ||||||
|             createBaseFolderInDatastore(dsMo, hyperHost); |             createBaseFolderInDatastore(dsMo, hyperHost.getHyperHostDatacenter()); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public static void createBaseFolderInDatastore(DatastoreMO dsMo, VmwareHypervisorHost hyperHost) throws Exception { |     public static void createBaseFolderInDatastore(DatastoreMO dsMo, ManagedObjectReference mor) throws Exception { | ||||||
|         String dsPath = String.format("[%s]", dsMo.getName()); |         String dsPath = String.format("[%s]", dsMo.getName()); | ||||||
|         String folderPath = String.format("[%s] %s", dsMo.getName(), VSPHERE_DATASTORE_BASE_FOLDER); |         String folderPath = String.format("[%s] %s", dsMo.getName(), VSPHERE_DATASTORE_BASE_FOLDER); | ||||||
|         String hiddenFolderPath = String.format("%s/%s", folderPath, VSPHERE_DATASTORE_HIDDEN_FOLDER); |         String hiddenFolderPath = String.format("%s/%s", folderPath, VSPHERE_DATASTORE_HIDDEN_FOLDER); | ||||||
| 
 | 
 | ||||||
|         if (!dsMo.folderExists(dsPath, VSPHERE_DATASTORE_BASE_FOLDER)) { |         if (!dsMo.folderExists(dsPath, VSPHERE_DATASTORE_BASE_FOLDER)) { | ||||||
|             s_logger.info(String.format("vSphere datastore base folder: %s does not exist, now creating on datastore: %s", VSPHERE_DATASTORE_BASE_FOLDER, dsMo.getName())); |             s_logger.info(String.format("vSphere datastore base folder: %s does not exist, now creating on datastore: %s", VSPHERE_DATASTORE_BASE_FOLDER, dsMo.getName())); | ||||||
|             dsMo.makeDirectory(folderPath, hyperHost.getHyperHostDatacenter()); |             dsMo.makeDirectory(folderPath, mor); | ||||||
|             // Adding another directory so vCentre doesn't remove the fcd directory when it's empty |             // Adding another directory so vCentre doesn't remove the fcd directory when it's empty | ||||||
|             dsMo.makeDirectory(hiddenFolderPath, hyperHost.getHyperHostDatacenter()); |             dsMo.makeDirectory(hiddenFolderPath, mor); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user