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

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


The following commit(s) were added to refs/heads/4.16 by this push:
     new 84f5768  [VMware][Deploy-as-is] OVF properties not importing when 
template is uploaded from local (#5861)
84f5768 is described below

commit 84f5768e64bdc316a586cfa149e4ac591ade5a1b
Author: Nicolas Vazquez <[email protected]>
AuthorDate: Wed Jan 26 02:58:52 2022 -0300

    [VMware][Deploy-as-is] OVF properties not importing when template is 
uploaded from local (#5861)
    
    * Fix ova upload missing details
    
    * Refactor and cleanup
    
    * Unused import
---
 .../storage/command/UploadStatusAnswer.java        | 21 ++----
 .../storage/image/BaseImageStoreDriverImpl.java    |  6 +-
 .../image/deployasis/DeployAsIsHelperImpl.java     | 74 +++++++++++-----------
 .../cloud/storage/ImageStoreUploadMonitorImpl.java | 23 +++----
 .../storage/image/deployasis/DeployAsIsHelper.java |  6 +-
 .../resource/NfsSecondaryStorageResource.java      | 12 ++--
 .../cloudstack/storage/template/UploadEntity.java  | 21 ++----
 7 files changed, 69 insertions(+), 94 deletions(-)

diff --git 
a/core/src/main/java/org/apache/cloudstack/storage/command/UploadStatusAnswer.java
 
b/core/src/main/java/org/apache/cloudstack/storage/command/UploadStatusAnswer.java
index 5c880c3..ee89ec0 100644
--- 
a/core/src/main/java/org/apache/cloudstack/storage/command/UploadStatusAnswer.java
+++ 
b/core/src/main/java/org/apache/cloudstack/storage/command/UploadStatusAnswer.java
@@ -20,7 +20,7 @@
 package org.apache.cloudstack.storage.command;
 
 import com.cloud.agent.api.Answer;
-import com.cloud.utils.Pair;
+import com.cloud.agent.api.to.OVFInformationTO;
 
 public class UploadStatusAnswer extends Answer {
     public static enum UploadStatus {
@@ -32,8 +32,7 @@ public class UploadStatusAnswer extends Answer {
     private long physicalSize = 0;
     private String installPath = null;
     private int downloadPercent = 0;
-    private Pair<String, String> guestOsInfo;
-    private String minimumHardwareVersion;
+    private OVFInformationTO ovfInformationTO;
 
     protected UploadStatusAnswer() {
     }
@@ -89,19 +88,11 @@ public class UploadStatusAnswer extends Answer {
         this.downloadPercent = downloadPercent;
     }
 
-    public Pair<String, String> getGuestOsInfo() {
-        return guestOsInfo;
+    public OVFInformationTO getOvfInformationTO() {
+        return ovfInformationTO;
     }
 
-    public void setGuestOsInfo(Pair<String, String> guestOsInfo) {
-        this.guestOsInfo = guestOsInfo;
-    }
-
-    public void setMinimumHardwareVersion(String minimumHardwareVersion) {
-        this.minimumHardwareVersion = minimumHardwareVersion;
-    }
-
-    public String getMinimumHardwareVersion() {
-        return minimumHardwareVersion;
+    public void setOvfInformationTO(OVFInformationTO ovfInformationTO) {
+        this.ovfInformationTO = ovfInformationTO;
     }
 }
diff --git 
a/engine/storage/src/main/java/org/apache/cloudstack/storage/image/BaseImageStoreDriverImpl.java
 
b/engine/storage/src/main/java/org/apache/cloudstack/storage/image/BaseImageStoreDriverImpl.java
index 0c55545..3ef9fbc 100644
--- 
a/engine/storage/src/main/java/org/apache/cloudstack/storage/image/BaseImageStoreDriverImpl.java
+++ 
b/engine/storage/src/main/java/org/apache/cloudstack/storage/image/BaseImageStoreDriverImpl.java
@@ -33,6 +33,7 @@ import java.util.stream.Collectors;
 import javax.inject.Inject;
 
 import com.cloud.agent.api.to.NfsTO;
+import com.cloud.agent.api.to.OVFInformationTO;
 import com.cloud.storage.DataStoreRole;
 import com.cloud.storage.Upload;
 import org.apache.cloudstack.storage.image.deployasis.DeployAsIsHelper;
@@ -207,8 +208,9 @@ public abstract class BaseImageStoreDriverImpl implements 
ImageStoreDriver {
         TemplateDataStoreVO tmpltStoreVO = 
_templateStoreDao.findByStoreTemplate(store.getId(), obj.getId());
         if (tmpltStoreVO != null) {
             if (tmpltStoreVO.getDownloadState() == 
VMTemplateStorageResourceAssoc.Status.DOWNLOADED) {
-                if (template.isDeployAsIs()) {
-                    boolean persistDeployAsIs = 
deployAsIsHelper.persistTemplateDeployAsIsDetails(template.getId(), answer, 
tmpltStoreVO);
+                if (template.isDeployAsIs() && answer != null) {
+                    OVFInformationTO ovfInformationTO = 
answer.getOvfInformationTO();
+                    boolean persistDeployAsIs = 
deployAsIsHelper.persistTemplateOVFInformationAndUpdateGuestOS(template.getId(),
 ovfInformationTO, tmpltStoreVO);
                     if (!persistDeployAsIs) {
                         LOGGER.info("Failed persisting deploy-as-is template 
details for template " + template.getName());
                         return null;
diff --git 
a/engine/storage/src/main/java/org/apache/cloudstack/storage/image/deployasis/DeployAsIsHelperImpl.java
 
b/engine/storage/src/main/java/org/apache/cloudstack/storage/image/deployasis/DeployAsIsHelperImpl.java
index 9d26da8..0fac479 100644
--- 
a/engine/storage/src/main/java/org/apache/cloudstack/storage/image/deployasis/DeployAsIsHelperImpl.java
+++ 
b/engine/storage/src/main/java/org/apache/cloudstack/storage/image/deployasis/DeployAsIsHelperImpl.java
@@ -18,7 +18,6 @@
  */
 package org.apache.cloudstack.storage.image.deployasis;
 
-import com.cloud.agent.api.storage.DownloadAnswer;
 import com.cloud.agent.api.to.NicTO;
 import com.cloud.agent.api.to.OVFInformationTO;
 import com.cloud.agent.api.to.deployasis.OVFConfigurationTO;
@@ -100,41 +99,44 @@ public class DeployAsIsHelperImpl implements 
DeployAsIsHelper {
         gson = builder.create();
     }
 
-    public boolean persistTemplateDeployAsIsDetails(long templateId, 
DownloadAnswer answer, TemplateDataStoreVO tmpltStoreVO) {
+    private void persistTemplateOVFInformation(long templateId, 
OVFInformationTO ovfInformationTO) {
+        List<OVFPropertyTO> ovfProperties = ovfInformationTO.getProperties();
+        List<OVFNetworkTO> networkRequirements = 
ovfInformationTO.getNetworks();
+        OVFVirtualHardwareSectionTO ovfHardwareSection = 
ovfInformationTO.getHardwareSection();
+        List<OVFEulaSectionTO> eulaSections = 
ovfInformationTO.getEulaSections();
+        Pair<String, String> guestOsInfo = ovfInformationTO.getGuestOsInfo();
+
+        if (CollectionUtils.isNotEmpty(ovfProperties)) {
+            persistTemplateDeployAsIsInformationTOList(templateId, 
ovfProperties);
+        }
+        if (CollectionUtils.isNotEmpty(networkRequirements)) {
+            persistTemplateDeployAsIsInformationTOList(templateId, 
networkRequirements);
+        }
+        if (CollectionUtils.isNotEmpty(eulaSections)) {
+            persistTemplateDeployAsIsInformationTOList(templateId, 
eulaSections);
+        }
+        String minimumHardwareVersion = null;
+        if (ovfHardwareSection != null) {
+            if 
(CollectionUtils.isNotEmpty(ovfHardwareSection.getConfigurations())) {
+                persistTemplateDeployAsIsInformationTOList(templateId, 
ovfHardwareSection.getConfigurations());
+            }
+            if 
(CollectionUtils.isNotEmpty(ovfHardwareSection.getCommonHardwareItems())) {
+                persistTemplateDeployAsIsInformationTOList(templateId, 
ovfHardwareSection.getCommonHardwareItems());
+            }
+            minimumHardwareVersion = 
ovfHardwareSection.getMinimiumHardwareVersion();
+        }
+        if (guestOsInfo != null) {
+            String osType = guestOsInfo.first();
+            String osDescription = guestOsInfo.second();
+            LOGGER.info("Guest OS information retrieved from the template: " + 
osType + " - " + osDescription);
+            handleGuestOsFromOVFDescriptor(templateId, osType, osDescription, 
minimumHardwareVersion);
+        }
+    }
+
+    public boolean persistTemplateOVFInformationAndUpdateGuestOS(long 
templateId, OVFInformationTO ovfInformationTO, TemplateDataStoreVO 
tmpltStoreVO) {
         try {
-            OVFInformationTO ovfInformationTO = answer.getOvfInformationTO();
             if (ovfInformationTO != null) {
-                List<OVFPropertyTO> ovfProperties = 
ovfInformationTO.getProperties();
-                List<OVFNetworkTO> networkRequirements = 
ovfInformationTO.getNetworks();
-                OVFVirtualHardwareSectionTO ovfHardwareSection = 
ovfInformationTO.getHardwareSection();
-                List<OVFEulaSectionTO> eulaSections = 
ovfInformationTO.getEulaSections();
-                Pair<String, String> guestOsInfo = 
ovfInformationTO.getGuestOsInfo();
-
-                if (CollectionUtils.isNotEmpty(ovfProperties)) {
-                    persistTemplateDeployAsIsInformationTOList(templateId, 
ovfProperties);
-                }
-                if (CollectionUtils.isNotEmpty(networkRequirements)) {
-                    persistTemplateDeployAsIsInformationTOList(templateId, 
networkRequirements);
-                }
-                if (CollectionUtils.isNotEmpty(eulaSections)) {
-                    persistTemplateDeployAsIsInformationTOList(templateId, 
eulaSections);
-                }
-                String minimumHardwareVersion = null;
-                if (ovfHardwareSection != null) {
-                    if 
(CollectionUtils.isNotEmpty(ovfHardwareSection.getConfigurations())) {
-                        persistTemplateDeployAsIsInformationTOList(templateId, 
ovfHardwareSection.getConfigurations());
-                    }
-                    if 
(CollectionUtils.isNotEmpty(ovfHardwareSection.getCommonHardwareItems())) {
-                        persistTemplateDeployAsIsInformationTOList(templateId, 
ovfHardwareSection.getCommonHardwareItems());
-                    }
-                    minimumHardwareVersion = 
ovfHardwareSection.getMinimiumHardwareVersion();
-                }
-                if (guestOsInfo != null) {
-                    String osType = guestOsInfo.first();
-                    String osDescription = guestOsInfo.second();
-                    LOGGER.info("Guest OS information retrieved from the 
template: " + osType + " - " + osDescription);
-                    handleGuestOsFromOVFDescriptor(templateId, osType, 
osDescription, minimumHardwareVersion);
-                }
+                persistTemplateOVFInformation(templateId, ovfInformationTO);
             }
         } catch (Exception e) {
             LOGGER.error("Error persisting deploy-as-is details for template " 
+ templateId, e);
@@ -151,7 +153,7 @@ public class DeployAsIsHelperImpl implements 
DeployAsIsHelper {
     /**
      * Returns the mapped guest OS from the OVF file of the template to the 
CloudStack database OS ID
      */
-    public Long retrieveTemplateGuestOsIdFromGuestOsInfo(long templateId, 
String guestOsType, String guestOsDescription,
+    private Long retrieveTemplateGuestOsIdFromGuestOsInfo(long templateId, 
String guestOsType, String guestOsDescription,
                                                          String 
minimumHardwareVersion) {
         VMTemplateVO template = templateDao.findById(templateId);
         Hypervisor.HypervisorType hypervisor = template.getHypervisorType();
@@ -337,7 +339,7 @@ public class DeployAsIsHelperImpl implements 
DeployAsIsHelper {
         return map;
     }
 
-    private void persistTemplateDeployAsIsInformationTOList(long templateId,
+    public void persistTemplateDeployAsIsInformationTOList(long templateId,
                                                             List<? extends 
TemplateDeployAsIsInformationTO> informationTOList) {
         for (TemplateDeployAsIsInformationTO informationTO : 
informationTOList) {
             String propKey = getKeyFromInformationTO(informationTO);
diff --git 
a/server/src/main/java/com/cloud/storage/ImageStoreUploadMonitorImpl.java 
b/server/src/main/java/com/cloud/storage/ImageStoreUploadMonitorImpl.java
index 0720927..7916f4a 100755
--- a/server/src/main/java/com/cloud/storage/ImageStoreUploadMonitorImpl.java
+++ b/server/src/main/java/com/cloud/storage/ImageStoreUploadMonitorImpl.java
@@ -25,8 +25,7 @@ import java.util.concurrent.TimeUnit;
 import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
-import com.cloud.hypervisor.Hypervisor;
-import com.cloud.utils.Pair;
+import com.cloud.agent.api.to.OVFInformationTO;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
 import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
@@ -412,18 +411,14 @@ public class ImageStoreUploadMonitorImpl extends 
ManagerBase implements ImageSto
 
                             VMTemplateVO templateUpdate = 
_templateDao.createForUpdate();
                             templateUpdate.setSize(answer.getVirtualSize());
-                            if (template.getHypervisorType() == 
Hypervisor.HypervisorType.VMware) {
-                                Pair<String, String> guestOsInfo = 
answer.getGuestOsInfo();
-                                String minimumHardwareVersion = 
answer.getMinimumHardwareVersion();
-                                String osType = guestOsInfo.first();
-                                String osDescription = guestOsInfo.second();
-                                s_logger.info("Guest OS information retrieved 
from the template: " + osType + " - " + osDescription);
-                                try {
-                                    Long guestOsId = 
deployAsIsHelper.retrieveTemplateGuestOsIdFromGuestOsInfo(template.getId(),
-                                            osType, osDescription, 
minimumHardwareVersion);
-                                    templateUpdate.setGuestOSId(guestOsId);
-                                } catch (CloudRuntimeException e) {
-                                    s_logger.error("Could not map the guest OS 
to a CloudStack guest OS", e);
+
+                            OVFInformationTO ovfInformationTO = 
answer.getOvfInformationTO();
+                            if (template.isDeployAsIs() && ovfInformationTO != 
null) {
+                                s_logger.debug("Received OVF information from 
the uploaded template");
+                                boolean persistDeployAsIs = 
deployAsIsHelper.persistTemplateOVFInformationAndUpdateGuestOS(tmpTemplate.getId(),
 ovfInformationTO, tmpTemplateDataStore);
+                                if (!persistDeployAsIs) {
+                                    s_logger.info("Failed persisting 
deploy-as-is template details for template " + template.getName());
+                                    break;
                                 }
                             }
                             _templateDao.update(tmpTemplate.getId(), 
templateUpdate);
diff --git 
a/server/src/main/java/org/apache/cloudstack/storage/image/deployasis/DeployAsIsHelper.java
 
b/server/src/main/java/org/apache/cloudstack/storage/image/deployasis/DeployAsIsHelper.java
index a04b043..c1be0d8 100644
--- 
a/server/src/main/java/org/apache/cloudstack/storage/image/deployasis/DeployAsIsHelper.java
+++ 
b/server/src/main/java/org/apache/cloudstack/storage/image/deployasis/DeployAsIsHelper.java
@@ -16,8 +16,8 @@
 // under the License.
 package org.apache.cloudstack.storage.image.deployasis;
 
-import com.cloud.agent.api.storage.DownloadAnswer;
 import com.cloud.agent.api.to.NicTO;
+import com.cloud.agent.api.to.OVFInformationTO;
 import com.cloud.vm.VirtualMachineProfile;
 import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO;
 
@@ -25,9 +25,7 @@ import java.util.Map;
 
 public interface DeployAsIsHelper {
 
-    boolean persistTemplateDeployAsIsDetails(long templateId, DownloadAnswer 
answer, TemplateDataStoreVO tmpltStoreVO);
+    boolean persistTemplateOVFInformationAndUpdateGuestOS(long templateId, 
OVFInformationTO ovfInformationTO, TemplateDataStoreVO tmpltStoreVO);
     Map<String, String> 
getVirtualMachineDeployAsIsProperties(VirtualMachineProfile vmId);
     Map<Integer, String> 
getAllocatedVirtualMachineNicsAdapterMapping(VirtualMachineProfile vm, NicTO[] 
nics);
-    Long retrieveTemplateGuestOsIdFromGuestOsInfo(long templateId, String 
guestOsType, String guestOsDescription,
-                                                  String 
minimumHardwareVersion);
 }
diff --git 
a/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
 
b/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
index 565c4df..ed5530c 100644
--- 
a/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
+++ 
b/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
@@ -2280,8 +2280,9 @@ public class NfsSecondaryStorageResource extends 
ServerResourceBase implements S
                 answer.setInstallPath(uploadEntity.getTmpltPath());
                 answer.setPhysicalSize(uploadEntity.getPhysicalSize());
                 answer.setDownloadPercent(100);
-                answer.setGuestOsInfo(uploadEntity.getGuestOsInfo());
-                
answer.setMinimumHardwareVersion(uploadEntity.getMinimumHardwareVersion());
+                if (uploadEntity.getOvfInformationTO() != null) {
+                    
answer.setOvfInformationTO(uploadEntity.getOvfInformationTO());
+                }
                 uploadEntityStateMap.remove(entityUuid);
                 return answer;
             } else if (uploadEntity.getUploadState() == 
UploadEntity.Status.IN_PROGRESS) {
@@ -3424,12 +3425,7 @@ public class NfsSecondaryStorageResource extends 
ServerResourceBase implements S
                 uploadEntity.setVirtualSize(info.virtualSize);
                 uploadEntity.setPhysicalSize(info.size);
                 if (info.ovfInformationTO != null) {
-                    if (info.ovfInformationTO.getGuestOsInfo() != null) {
-                        
uploadEntity.setGuestOsInfo(info.ovfInformationTO.getGuestOsInfo());
-                    }
-                    if (info.ovfInformationTO.getHardwareSection() != null) {
-                        
uploadEntity.setMinimumHardwareVersion(info.ovfInformationTO.getHardwareSection().getMinimiumHardwareVersion());
-                    }
+                    uploadEntity.setOvfInformationTO(info.ovfInformationTO);
                 }
                 break;
             }
diff --git 
a/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/template/UploadEntity.java
 
b/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/template/UploadEntity.java
index 6d5154e..8acf4d7 100644
--- 
a/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/template/UploadEntity.java
+++ 
b/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/template/UploadEntity.java
@@ -18,8 +18,8 @@
 package org.apache.cloudstack.storage.template;
 
 
+import com.cloud.agent.api.to.OVFInformationTO;
 import com.cloud.storage.Storage;
-import com.cloud.utils.Pair;
 
 public class UploadEntity {
     private long downloadedsize;
@@ -36,8 +36,7 @@ public class UploadEntity {
     private String description;
     private long contentLength;
     private long processTimeout;
-    private Pair<String, String> guestOsInfo;
-    private String minimumHardwareVersion;
+    private OVFInformationTO ovfInformationTO;
 
     public static enum ResourceType {
         VOLUME, TEMPLATE
@@ -211,19 +210,11 @@ public class UploadEntity {
         this.contentLength = contentLength;
     }
 
-    public Pair<String, String> getGuestOsInfo() {
-        return guestOsInfo;
+    public OVFInformationTO getOvfInformationTO() {
+        return ovfInformationTO;
     }
 
-    public void setGuestOsInfo(Pair<String, String> guestOsInfo) {
-        this.guestOsInfo = guestOsInfo;
-    }
-
-    public void setMinimumHardwareVersion(String minimumHardwareVersion) {
-        this.minimumHardwareVersion = minimumHardwareVersion;
-    }
-
-    public String getMinimumHardwareVersion() {
-        return minimumHardwareVersion;
+    public void setOvfInformationTO(OVFInformationTO ovfInformationTO) {
+        this.ovfInformationTO = ovfInformationTO;
     }
 }

Reply via email to