diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java b/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java index df05f8aa562..e8d91f6e8a0 100644 --- a/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java +++ b/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java @@ -34,6 +34,7 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; +import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import com.google.gson.Gson; @@ -1939,14 +1940,28 @@ public class VirtualMachineMO extends BaseMO { } } + private static String trimSnapshotDeltaPostfix(String name) { + String[] tokens = name.split("-"); + if (tokens.length > 1 && tokens[tokens.length - 1].matches("[0-9]{6,}")) { + List trimmedTokens = new ArrayList(); + for (int i = 0; i < tokens.length - 1; i++) + trimmedTokens.add(tokens[i]); + return StringUtils.join(trimmedTokens, "-"); + } + return name; + } + // return pair of VirtualDisk and disk device bus name(ide0:0, etc) public Pair getDiskDevice(String vmdkDatastorePath, boolean matchExactly) throws Exception { List devices = _context.getVimClient().getDynamicProperty(_mor, "config.hardware.device"); - s_logger.info("Look for disk device info from volume : " + vmdkDatastorePath); DatastoreFile dsSrcFile = new DatastoreFile(vmdkDatastorePath); String srcBaseName = dsSrcFile.getFileBaseName(); + srcBaseName = trimSnapshotDeltaPostfix(srcBaseName); + + s_logger.info("Look for disk device info from volume : " + vmdkDatastorePath + " with trimmed base name: " + srcBaseName); + if (devices != null && devices.size() > 0) { for (VirtualDevice device : devices) { if (device instanceof VirtualDisk) {