This is an automated email from the ASF dual-hosted git repository.

dahn pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/master by this push:
     new 63fbbe7  [Bug fix] VMware: Fix for SSVM recreation on deployasis 
systemVM templates (#4437)
63fbbe7 is described below

commit 63fbbe75064b8284cfe466e4e61dd98ca5250927
Author: Nicolas Vazquez <[email protected]>
AuthorDate: Sat Nov 7 05:46:54 2020 -0300

    [Bug fix] VMware: Fix for SSVM recreation on deployasis systemVM templates 
(#4437)
---
 .../engine/orchestration/VolumeOrchestrator.java   | 38 ++++++++++++++--------
 1 file changed, 25 insertions(+), 13 deletions(-)

diff --git 
a/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
 
b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
index 05732e5..e4cb893 100644
--- 
a/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
+++ 
b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
@@ -36,8 +36,10 @@ import com.cloud.agent.api.to.DatadiskTO;
 import com.cloud.storage.VolumeDetailVO;
 import com.cloud.storage.dao.VMTemplateDetailsDao;
 import com.cloud.utils.StringUtils;
+import com.cloud.vm.SecondaryStorageVmVO;
 import com.cloud.vm.UserVmDetailVO;
 import com.cloud.vm.VmDetailConstants;
+import com.cloud.vm.dao.SecondaryStorageVmDao;
 import com.cloud.vm.dao.UserVmDetailsDao;
 import org.apache.cloudstack.api.command.admin.vm.MigrateVMCmd;
 import org.apache.cloudstack.api.command.admin.volume.MigrateVolumeCmdByAdmin;
@@ -216,6 +218,8 @@ public class VolumeOrchestrator extends ManagerBase 
implements VolumeOrchestrati
     TemplateService templateService;
     @Inject
     UserVmDetailsDao userVmDetailsDao;
+    @Inject
+    private SecondaryStorageVmDao secondaryStorageVmDao;
 
     private final StateMachine2<Volume.State, Volume.Event, Volume> 
_volStateMachine;
     protected List<StoragePoolAllocator> _storagePoolAllocators;
@@ -824,19 +828,27 @@ public class VolumeOrchestrator extends ManagerBase 
implements VolumeOrchestrati
         int volumesNumber = 1;
         List<DatadiskTO> templateAsIsDisks = null;
         String configurationId = null;
-        if (template.isDeployAsIs()) {
-            UserVmDetailVO configurationDetail = 
userVmDetailsDao.findDetail(vm.getId(), 
VmDetailConstants.DEPLOY_AS_IS_CONFIGURATION);
-            if (configurationDetail != null) {
-                configurationId = configurationDetail.getValue();
-            }
-            templateAsIsDisks = 
_tmpltMgr.getTemplateDisksOnImageStore(template.getId(), DataStoreRole.Image, 
configurationId);
-            if (CollectionUtils.isNotEmpty(templateAsIsDisks)) {
-                templateAsIsDisks = templateAsIsDisks.stream()
-                        .filter(x -> !x.isIso())
-                        
.sorted(Comparator.comparing(DatadiskTO::getDiskNumber))
-                        .collect(Collectors.toList());
+        boolean deployVmAsIs = false;
+        if (template.isDeployAsIs() && vm.getType() != 
VirtualMachine.Type.SecondaryStorageVm) {
+            List<SecondaryStorageVmVO> runningSSVMs = 
secondaryStorageVmDao.getSecStorageVmListInStates(null, vm.getDataCenterId(), 
State.Running);
+            if (CollectionUtils.isEmpty(runningSSVMs)) {
+                s_logger.info("Could not find a running SSVM in datacenter " + 
vm.getDataCenterId() + " for deploying VM as is, " +
+                        "not deploying VM " + vm.getInstanceName() + " as-is");
+            } else {
+                UserVmDetailVO configurationDetail = 
userVmDetailsDao.findDetail(vm.getId(), 
VmDetailConstants.DEPLOY_AS_IS_CONFIGURATION);
+                if (configurationDetail != null) {
+                    configurationId = configurationDetail.getValue();
+                }
+                templateAsIsDisks = 
_tmpltMgr.getTemplateDisksOnImageStore(template.getId(), DataStoreRole.Image, 
configurationId);
+                if (CollectionUtils.isNotEmpty(templateAsIsDisks)) {
+                    templateAsIsDisks = templateAsIsDisks.stream()
+                            .filter(x -> !x.isIso())
+                            
.sorted(Comparator.comparing(DatadiskTO::getDiskNumber))
+                            .collect(Collectors.toList());
+                }
+                volumesNumber = templateAsIsDisks.size();
+                deployVmAsIs = true;
             }
-            volumesNumber = templateAsIsDisks.size();
         }
 
         if (volumesNumber < 1) {
@@ -849,7 +861,7 @@ public class VolumeOrchestrator extends ManagerBase 
implements VolumeOrchestrati
             String volumeName = name;
             Long volumeSize = rootDisksize;
             long deviceId = type.equals(Type.ROOT) ? 0L : 1L;
-            if (template.isDeployAsIs()) {
+            if (deployVmAsIs) {
                 int volumeNameSuffix = 
templateAsIsDisks.get(number).getDiskNumber();
                 volumeName = String.format("%s-%d", volumeName, 
volumeNameSuffix);
                 volumeSize = templateAsIsDisks.get(number).getVirtualSize();

Reply via email to