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;
}
}