diff --git a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java index 9242052ae58..75847bde637 100644 --- a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java +++ b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java @@ -1501,8 +1501,9 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic UserVmVO vm = _userVmDao.findById(vmId); VolumeVO exstingVolumeOfVm = null; + VMTemplateVO template = _templateDao.findById(vm.getTemplateId()); List rootVolumesOfVm = _volsDao.findByInstanceAndType(vmId, Volume.Type.ROOT); - if (rootVolumesOfVm.size() > 1) { + if (rootVolumesOfVm.size() > 1 && template != null && !template.isDeployAsIs()) { throw new CloudRuntimeException("The VM " + vm.getHostName() + " has more than one ROOT volume and is in an invalid state."); } else { if (!rootVolumesOfVm.isEmpty()) { diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java index 4f78645730f..e1b7d2cb7c2 100644 --- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java @@ -6730,13 +6730,14 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir needRestart = true; } + VMTemplateVO currentTemplate = _templateDao.findById(vm.getTemplateId()); List rootVols = _volsDao.findByInstanceAndType(vmId, Volume.Type.ROOT); if (rootVols.isEmpty()) { InvalidParameterValueException ex = new InvalidParameterValueException("Can not find root volume for VM " + vm.getUuid()); ex.addProxyObject(vm.getUuid(), "vmId"); throw ex; } - if (rootVols.size() > 1) { + if (rootVols.size() > 1 && currentTemplate != null && !currentTemplate.isDeployAsIs()) { InvalidParameterValueException ex = new InvalidParameterValueException("There are " + rootVols.size() + " root volumes for VM " + vm.getUuid()); ex.addProxyObject(vm.getUuid(), "vmId"); throw ex;