mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
Fix root folder issue on datastore
This commit is contained in:
parent
f05b567d4c
commit
a72782f2e5
1
deps/install-non-oss.sh
vendored
1
deps/install-non-oss.sh
vendored
@ -40,4 +40,5 @@ mvn install:install-file -Dfile=vim25_65.jar -DgroupId=com.cloud.com.vmwa
|
||||
# From https://my.vmware.com/group/vmware/details?downloadGroup=WEBCLIENTSDK67U2&productId=742
|
||||
mvn install:install-file -Dfile=vim25_67.jar -DgroupId=com.cloud.com.vmware -DartifactId=vmware-vim25 -Dversion=6.7 -Dpackaging=jar
|
||||
|
||||
# From https://my.vmware.com/group/vmware/get-download?downloadGroup=VS-MGMT-SDK65
|
||||
mvn install:install-file -Dfile=pbm_65.jar -DgroupId=com.cloud.com.vmware -DartifactId=pbm -Dversion=6.5 -Dpackaging=jar
|
||||
|
||||
@ -4913,8 +4913,10 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
|
||||
|
||||
assert (morDatastore != null);
|
||||
|
||||
DatastoreSummary summary = new DatastoreMO(getServiceContext(), morDatastore).getSummary();
|
||||
DatastoreMO dsMo = new DatastoreMO(getServiceContext(), morDatastore);
|
||||
HypervisorHostHelper.createBaseFolderInDatastore(dsMo, hyperHost);
|
||||
|
||||
DatastoreSummary summary = dsMo.getSummary();
|
||||
long capacity = summary.getCapacity();
|
||||
long available = summary.getFreeSpace();
|
||||
|
||||
|
||||
@ -23,6 +23,8 @@ import org.apache.log4j.Logger;
|
||||
import com.cloud.hypervisor.vmware.mo.DatacenterMO;
|
||||
import com.cloud.hypervisor.vmware.mo.DatastoreFile;
|
||||
import com.cloud.hypervisor.vmware.mo.DatastoreMO;
|
||||
import com.cloud.hypervisor.vmware.mo.HypervisorHostHelper;
|
||||
|
||||
import com.cloud.utils.Pair;
|
||||
|
||||
/**
|
||||
@ -309,6 +311,10 @@ public class VmwareStorageLayoutHelper {
|
||||
}
|
||||
|
||||
public static String getLegacyDatastorePathFromVmdkFileName(DatastoreMO dsMo, String vmdkFileName) throws Exception {
|
||||
return String.format("[%s] %s/%s", dsMo.getName(), HypervisorHostHelper.VSPHERE_DATASTORE_BASE_FOLDER, vmdkFileName);
|
||||
}
|
||||
|
||||
public static String getDeprecatedLegacyDatastorePathFromVmdkFileName(DatastoreMO dsMo, String vmdkFileName) throws Exception {
|
||||
return String.format("[%s] %s", dsMo.getName(), vmdkFileName);
|
||||
}
|
||||
|
||||
|
||||
@ -260,6 +260,12 @@ public class DatastoreMO extends BaseMO {
|
||||
if (!DatastoreFile.isFullDatastorePath(destFullPath))
|
||||
destFullPath = String.format("[%s] %s", destDsName, destFilePath);
|
||||
|
||||
DatastoreMO srcDsMo = new DatastoreMO(_context, morDestDs);
|
||||
if (!srcDsMo.fileExists(srcFullPath)) {
|
||||
s_logger.error(String.format("Cannot move file to destination datastore due to file %s does not exists", srcFullPath));
|
||||
return false;
|
||||
}
|
||||
|
||||
ManagedObjectReference morTask = _context.getService().moveDatastoreFileTask(morFileManager, srcFullPath, morSrcDc, destFullPath, morDestDc, forceOverwrite);
|
||||
|
||||
boolean result = _context.getVimClient().waitForTask(morTask);
|
||||
@ -267,7 +273,7 @@ public class DatastoreMO extends BaseMO {
|
||||
_context.waitForTaskProgressDone(morTask);
|
||||
return true;
|
||||
} else {
|
||||
s_logger.error("VMware moveDatgastoreFile_Task failed due to " + TaskMO.getTaskFailureInfo(_context, morTask));
|
||||
s_logger.error("VMware moveDatastoreFile_Task failed due to " + TaskMO.getTaskFailureInfo(_context, morTask));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -842,6 +842,7 @@ public class HostMO extends BaseMO implements VmwareHypervisorHost {
|
||||
s_logger.trace("vCenter API trace - mountDatastore(). target MOR: " + _mor.getValue() + ", vmfs: " + vmfsDatastore + ", poolHost: " + poolHostAddress +
|
||||
", poolHostPort: " + poolHostPort + ", poolPath: " + poolPath + ", poolUuid: " + poolUuid);
|
||||
|
||||
DatastoreMO dsMo = null;
|
||||
HostDatastoreSystemMO hostDatastoreSystemMo = getHostDatastoreSystemMO();
|
||||
ManagedObjectReference morDatastore = hostDatastoreSystemMo.findDatastore(poolUuid);
|
||||
if (morDatastore == null) {
|
||||
@ -868,6 +869,7 @@ public class HostMO extends BaseMO implements VmwareHypervisorHost {
|
||||
s_logger.trace("vCenter API trace - mountDatastore() done(failed)");
|
||||
throw new Exception(msg);
|
||||
}
|
||||
dsMo = new DatastoreMO(_context, morDatastore);
|
||||
} else {
|
||||
morDatastore = _context.getDatastoreMorByPath(poolPath);
|
||||
if (morDatastore == null) {
|
||||
@ -879,11 +881,13 @@ public class HostMO extends BaseMO implements VmwareHypervisorHost {
|
||||
throw new Exception(msg);
|
||||
}
|
||||
|
||||
DatastoreMO dsMo = new DatastoreMO(_context, morDatastore);
|
||||
dsMo = new DatastoreMO(_context, morDatastore);
|
||||
dsMo.setCustomFieldValue(CustomFieldConstants.CLOUD_UUID, poolUuid);
|
||||
}
|
||||
}
|
||||
|
||||
HypervisorHostHelper.createBaseFolderInDatastore(dsMo, this);
|
||||
|
||||
if (s_logger.isTraceEnabled())
|
||||
s_logger.trace("vCenter API trace - mountDatastore() done(successfully)");
|
||||
|
||||
|
||||
@ -138,6 +138,7 @@ public class HypervisorHostHelper {
|
||||
private static final String UNTAGGED_VLAN_NAME = "untagged";
|
||||
private static final String VMDK_PACK_DIR = "ova";
|
||||
private static final String OVA_OPTION_KEY_BOOTDISK = "cloud.ova.bootdisk";
|
||||
public static final String VSPHERE_DATASTORE_BASE_FOLDER = ".cloudstack.base.folder";
|
||||
|
||||
public static VirtualMachineMO findVmFromObjectContent(VmwareContext context, ObjectContent[] ocs, String name, String instanceNameCustomField) {
|
||||
|
||||
@ -171,6 +172,7 @@ public class HypervisorHostHelper {
|
||||
if (morDs == null)
|
||||
morDs = hyperHost.findDatastore(uuidName);
|
||||
|
||||
DatastoreMO dsMo = new DatastoreMO(hyperHost.getContext(), morDs);
|
||||
return morDs;
|
||||
}
|
||||
|
||||
@ -2084,4 +2086,13 @@ public class HypervisorHostHelper {
|
||||
return DiskControllerType.getType(controller) == DiskControllerType.ide;
|
||||
}
|
||||
|
||||
public static void createBaseFolderInDatastore(DatastoreMO dsMo, VmwareHypervisorHost hyperHost) throws Exception {
|
||||
String dsPath = String.format("[%s]", dsMo.getName());
|
||||
String folderPath = String.format("[%s] %s", dsMo.getName(), 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()));
|
||||
dsMo.makeDirectory(folderPath, hyperHost.getHyperHostDatacenter());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user