From dc4f913afaa3def370511bc47cb8eeab2002e20f Mon Sep 17 00:00:00 2001 From: nvazquez Date: Thu, 8 Oct 2020 14:48:20 -0300 Subject: [PATCH] Fix restrictions on attach and restore VMs --- .../src/main/java/com/cloud/storage/VolumeApiServiceImpl.java | 3 ++- server/src/main/java/com/cloud/vm/UserVmManagerImpl.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) 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;