Updated Branches: refs/heads/4.2 9f84eb2f1 -> b04a2b561
CLOUDSTACK-4264 Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/b04a2b56 Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/b04a2b56 Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/b04a2b56 Branch: refs/heads/4.2 Commit: b04a2b561b96ec86ba45647f335c5916a7cc65a7 Parents: 9f84eb2 Author: Mike Tutkowski <[email protected]> Authored: Mon Aug 12 21:57:55 2013 -0600 Committer: Mike Tutkowski <[email protected]> Committed: Mon Aug 12 21:57:55 2013 -0600 ---------------------------------------------------------------------- .../storage/resource/VmwareStorageProcessor.java | 10 +++++++--- .../src/com/cloud/storage/VolumeManagerImpl.java | 17 ++++++++++++----- 2 files changed, 19 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b04a2b56/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java ---------------------------------------------------------------------- diff --git a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java index 39368cc..8fd419a 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java +++ b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java @@ -1174,9 +1174,13 @@ public class VmwareStorageProcessor implements StorageProcessor { datastoreVolumePath = dsMo.getDatastorePath(dsMo.getName() + ".vmdk"); } } else { - datastoreVolumePath = VmwareStorageLayoutHelper.getLegacyDatastorePathFromVmdkFileName(dsMo, volumeTO.getPath() + ".vmdk"); - if(!dsMo.fileExists(datastoreVolumePath)) { - datastoreVolumePath = VmwareStorageLayoutHelper.getVmwareDatastorePathFromVmdkFileName(dsMo, vmName, volumeTO.getPath() + ".vmdk"); + if(!isManaged) { + datastoreVolumePath = VmwareStorageLayoutHelper.getLegacyDatastorePathFromVmdkFileName(dsMo, volumeTO.getPath() + ".vmdk"); + if(!dsMo.fileExists(datastoreVolumePath)) { + datastoreVolumePath = VmwareStorageLayoutHelper.getVmwareDatastorePathFromVmdkFileName(dsMo, vmName, volumeTO.getPath() + ".vmdk"); + } + } else { + datastoreVolumePath = dsMo.getDatastorePath(dsMo.getName() + ".vmdk"); } } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b04a2b56/server/src/com/cloud/storage/VolumeManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/storage/VolumeManagerImpl.java b/server/src/com/cloud/storage/VolumeManagerImpl.java index 48dda36..db1e5aa 100644 --- a/server/src/com/cloud/storage/VolumeManagerImpl.java +++ b/server/src/com/cloud/storage/VolumeManagerImpl.java @@ -1824,14 +1824,21 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager { HypervisorType dataDiskHyperType = _volsDao.getHypervisorType(volume .getId()); - if (dataDiskHyperType != HypervisorType.None + + VolumeVO dataDiskVol = _volsDao.findById(volume.getId()); + StoragePoolVO dataDiskStoragePool = _storagePoolDao.findById(dataDiskVol.getPoolId()); + + // managed storage can be used for different types of hypervisors + // only perform this check if the volume's storage pool is not null and not managed + if (dataDiskStoragePool != null && !dataDiskStoragePool.isManaged()) { + if (dataDiskHyperType != HypervisorType.None && rootDiskHyperType != dataDiskHyperType) { - throw new InvalidParameterValueException( - "Can't attach a volume created by: " + dataDiskHyperType - + " to a " + rootDiskHyperType + " vm"); + throw new InvalidParameterValueException( + "Can't attach a volume created by: " + dataDiskHyperType + + " to a " + rootDiskHyperType + " vm"); + } } - deviceId = getDeviceId(vmId, deviceId); VolumeInfo volumeOnPrimaryStorage = volume;
