diff --git a/api/src/main/java/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoCmd.java b/api/src/main/java/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoCmd.java index 696a500860e3..54a398d756f1 100644 --- a/api/src/main/java/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoCmd.java @@ -145,8 +145,8 @@ public Map getDetails() { return (Map) (paramsCollection.toArray())[0]; } - public boolean isCleanupDetails(){ - return cleanupDetails == null ? false : cleanupDetails.booleanValue(); + public boolean isCleanupDetails() { + return cleanupDetails != null && cleanupDetails; } public CPU.CPUArch getCPUArch() { diff --git a/engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateDaoImpl.java b/engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateDaoImpl.java index 98859789f82c..45dffea76214 100644 --- a/engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateDaoImpl.java +++ b/engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateDaoImpl.java @@ -459,7 +459,7 @@ public void saveDetails(VMTemplateVO tmpl) { if (detailsStr == null) { return; } - List details = new ArrayList(); + List details = new ArrayList<>(); for (String key : detailsStr.keySet()) { VMTemplateDetailVO detail = new VMTemplateDetailVO(tmpl.getId(), key, detailsStr.get(key), true); details.add(detail); @@ -481,7 +481,7 @@ public long addTemplateToZone(VMTemplateVO tmplt, long zoneId) { } if (tmplt.getDetails() != null) { - List details = new ArrayList(); + List details = new ArrayList<>(); for (String key : tmplt.getDetails().keySet()) { details.add(new VMTemplateDetailVO(tmplt.getId(), key, tmplt.getDetails().get(key), true)); } diff --git a/server/src/main/java/com/cloud/template/TemplateManagerImpl.java b/server/src/main/java/com/cloud/template/TemplateManagerImpl.java index 78265021c0ab..194d97349f01 100755 --- a/server/src/main/java/com/cloud/template/TemplateManagerImpl.java +++ b/server/src/main/java/com/cloud/template/TemplateManagerImpl.java @@ -2210,7 +2210,7 @@ private VMTemplateVO updateTemplateOrIso(BaseUpdateTemplateOrIsoCmd cmd) { templateType == null && templateTag == null && arch == null && - (! cleanupDetails && details == null) //update details in every case except this one + (!cleanupDetails && details == null) //update details in every case except this one ); if (!updateNeeded) { return template; @@ -2308,8 +2308,7 @@ private VMTemplateVO updateTemplateOrIso(BaseUpdateTemplateOrIsoCmd cmd) { if (cleanupDetails) { template.setDetails(null); _tmpltDetailsDao.removeDetails(id); - } - else if (details != null && !details.isEmpty()) { + } else if (details != null && !details.isEmpty()) { template.setDetails(details); _tmpltDao.saveDetails(template); } diff --git a/ui/src/views/image/UpdateTemplate.vue b/ui/src/views/image/UpdateTemplate.vue index 7db402cdd5b8..401f0cfda9a5 100644 --- a/ui/src/views/image/UpdateTemplate.vue +++ b/ui/src/views/image/UpdateTemplate.vue @@ -245,7 +245,8 @@ export default { userdataid: null, userdatapolicy: null, userdatapolicylist: {}, - architectureTypes: {} + architectureTypes: {}, + details: {} } }, beforeCreate () { @@ -295,6 +296,11 @@ export default { } } } + if (this.resource.details) { + this.details = Object.keys(this.resource.details).map(k => { + return { name: k, value: this.resource.details[k] } + }) + } const resourceDetailsFields = [] if (this.resource.hypervisor === 'KVM') { resourceDetailsFields.push('rootDiskController') @@ -304,7 +310,7 @@ export default { for (var detailsField of resourceDetailsFields) { var detailValue = this.resource?.details?.[detailsField] || null if (detailValue) { - this.form[detailValue] = fieldValue + this.form[detailsField] = detailValue } } }, @@ -495,6 +501,11 @@ export default { const params = { id: this.resource.id } + if (this.resource.details) { + Object.keys(this.resource.details).forEach((detail, index) => { + params['details[0].' + detail] = this.resource.details[detail] + }) + } const detailsField = ['rootDiskController', 'nicAdapter', 'keyboard'] for (const key in values) { if (!this.isValidValueForKey(values, key)) continue