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