diff --git a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java index 4702dcee5d9..870863d12fd 100644 --- a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -5243,12 +5243,12 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa answer.setLocalDatastoreName(morDatastore.getValue()); childDsMo.setCustomFieldValue(CustomFieldConstants.CLOUD_UUID, uuid); - HypervisorHostHelper.createBaseFolderInDatastore(childDsMo, hyperHost); + HypervisorHostHelper.createBaseFolderInDatastore(childDsMo, hyperHost.getHyperHostDatacenter()); childDatastoresModifyStoragePoolAnswers.add(answer); } } else { - HypervisorHostHelper.createBaseFolderInDatastore(dsMo, hyperHost); + HypervisorHostHelper.createBaseFolderInDatastore(dsMo, hyperHost.getHyperHostDatacenter()); DatastoreSummary summary = dsMo.getDatastoreSummary(); capacity = summary.getCapacity(); @@ -6183,6 +6183,8 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa dsMo.setCustomFieldValue(CustomFieldConstants.CLOUD_UUID, poolUuid); } + HypervisorHostHelper.createBaseFolder(dsMo, hyperHost, StoragePoolType.VMFS); + DatastoreSummary dsSummary = dsMo.getDatastoreSummary(); String address = hostMo.getHostName(); StoragePoolInfo pInfo = new StoragePoolInfo(poolUuid, address, dsMo.getMor().getValue(), "", StoragePoolType.VMFS, dsSummary.getCapacity(), diff --git a/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageLayoutHelper.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageLayoutHelper.java index 6c66183240c..54b899b9123 100644 --- a/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageLayoutHelper.java +++ b/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageLayoutHelper.java @@ -263,6 +263,7 @@ public class VmwareStorageLayoutHelper implements Configurable { s_logger.info("Check if we need to move " + fileFullDsPath + " to its root location"); DatastoreMO dsMo = new DatastoreMO(dcMo.getContext(), dcMo.findDatastore(file.getDatastoreName())); 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()); if (!targetFile.getPath().equalsIgnoreCase(file.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 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); if (!dsMo.fileExists(vmdkDatastorePath)) { 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 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); } diff --git a/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageProcessor.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageProcessor.java index eb6251a2a39..da6713746b8 100644 --- a/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageProcessor.java +++ b/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageProcessor.java @@ -3772,6 +3772,7 @@ public class VmwareStorageProcessor implements StorageProcessor { } if(!primaryDsMo.getDatastoreType().equalsIgnoreCase("VVOL")) { + HypervisorHostHelper.createBaseFolderInDatastore(primaryDsMo, primaryDsMo.getDataCenterMor()); clonedVm.moveAllVmDiskFiles(primaryDsMo, HypervisorHostHelper.VSPHERE_DATASTORE_BASE_FOLDER, false); } clonedVm.detachAllDisks(); diff --git a/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/DatastoreMO.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/DatastoreMO.java index 804af6286d1..49e946ad7d8 100644 --- a/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/DatastoreMO.java +++ b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/DatastoreMO.java @@ -67,6 +67,10 @@ public class DatastoreMO extends BaseMO { return (DatastoreSummary)_context.getVimClient().getDynamicProperty(_mor, "summary"); } + public ManagedObjectReference getDataCenterMor() throws Exception { + return getOwnerDatacenter().first().getMor(); + } + public HostDatastoreBrowserMO getHostDatastoreBrowserMO() throws Exception { return new HostDatastoreBrowserMO(_context, (ManagedObjectReference)_context.getVimClient().getDynamicProperty(_mor, "browser")); } diff --git a/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HostMO.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HostMO.java index 0457039293a..ac419b24341 100644 --- a/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HostMO.java +++ b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HostMO.java @@ -890,7 +890,7 @@ public class HostMO extends BaseMO implements VmwareHypervisorHost { } if (dsMo != null && !"StoragePod".equals(morDatastore.getType()) && createBaseFolder) { - HypervisorHostHelper.createBaseFolderInDatastore(dsMo, this); + HypervisorHostHelper.createBaseFolderInDatastore(dsMo, this.getHyperHostDatacenter()); } if (s_logger.isTraceEnabled()) diff --git a/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java index 57f8e0262ec..c5e2fe52120 100644 --- a/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java +++ b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java @@ -2234,23 +2234,23 @@ public class HypervisorHostHelper { List datastoresInCluster = storagepodMO.getDatastoresInDatastoreCluster(); for (ManagedObjectReference datastore : datastoresInCluster) { DatastoreMO childDsMo = new DatastoreMO(hyperHost.getContext(), datastore); - createBaseFolderInDatastore(childDsMo, hyperHost); + createBaseFolderInDatastore(childDsMo, hyperHost.getHyperHostDatacenter()); } } 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 folderPath = String.format("[%s] %s", dsMo.getName(), VSPHERE_DATASTORE_BASE_FOLDER); String hiddenFolderPath = String.format("%s/%s", folderPath, VSPHERE_DATASTORE_HIDDEN_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())); - dsMo.makeDirectory(folderPath, hyperHost.getHyperHostDatacenter()); + dsMo.makeDirectory(folderPath, mor); // Adding another directory so vCentre doesn't remove the fcd directory when it's empty - dsMo.makeDirectory(hiddenFolderPath, hyperHost.getHyperHostDatacenter()); + dsMo.makeDirectory(hiddenFolderPath, mor); } }