Skip to content

Commit ce42ce5

Browse files
Fix template details deletion while updating template from UI (#12559)
* Fix template details deletion while updating template from UI * update the latest template details before submit
1 parent 6bed3d4 commit ce42ce5

File tree

4 files changed

+41
-19
lines changed

4 files changed

+41
-19
lines changed

api/src/main/java/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoCmd.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,8 @@ public Map getDetails() {
145145
return (Map) (paramsCollection.toArray())[0];
146146
}
147147

148-
public boolean isCleanupDetails(){
149-
return cleanupDetails == null ? false : cleanupDetails.booleanValue();
148+
public boolean isCleanupDetails() {
149+
return cleanupDetails != null && cleanupDetails;
150150
}
151151

152152
public CPU.CPUArch getCPUArch() {

engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateDaoImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,7 @@ public void saveDetails(VMTemplateVO tmpl) {
459459
if (detailsStr == null) {
460460
return;
461461
}
462-
List<VMTemplateDetailVO> details = new ArrayList<VMTemplateDetailVO>();
462+
List<VMTemplateDetailVO> details = new ArrayList<>();
463463
for (String key : detailsStr.keySet()) {
464464
VMTemplateDetailVO detail = new VMTemplateDetailVO(tmpl.getId(), key, detailsStr.get(key), true);
465465
details.add(detail);
@@ -481,7 +481,7 @@ public long addTemplateToZone(VMTemplateVO tmplt, long zoneId) {
481481
}
482482

483483
if (tmplt.getDetails() != null) {
484-
List<VMTemplateDetailVO> details = new ArrayList<VMTemplateDetailVO>();
484+
List<VMTemplateDetailVO> details = new ArrayList<>();
485485
for (String key : tmplt.getDetails().keySet()) {
486486
details.add(new VMTemplateDetailVO(tmplt.getId(), key, tmplt.getDetails().get(key), true));
487487
}

server/src/main/java/com/cloud/template/TemplateManagerImpl.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2210,7 +2210,7 @@ private VMTemplateVO updateTemplateOrIso(BaseUpdateTemplateOrIsoCmd cmd) {
22102210
templateType == null &&
22112211
templateTag == null &&
22122212
arch == null &&
2213-
(! cleanupDetails && details == null) //update details in every case except this one
2213+
(!cleanupDetails && details == null) //update details in every case except this one
22142214
);
22152215
if (!updateNeeded) {
22162216
return template;
@@ -2308,8 +2308,7 @@ private VMTemplateVO updateTemplateOrIso(BaseUpdateTemplateOrIsoCmd cmd) {
23082308
if (cleanupDetails) {
23092309
template.setDetails(null);
23102310
_tmpltDetailsDao.removeDetails(id);
2311-
}
2312-
else if (details != null && !details.isEmpty()) {
2311+
} else if (details != null && !details.isEmpty()) {
23132312
template.setDetails(details);
23142313
_tmpltDao.saveDetails(template);
23152314
}

ui/src/views/image/UpdateTemplate.vue

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,9 @@ export default {
245245
userdataid: null,
246246
userdatapolicy: null,
247247
userdatapolicylist: {},
248-
architectureTypes: {}
248+
architectureTypes: {},
249+
detailsFields: [],
250+
details: {}
249251
}
250252
},
251253
beforeCreate () {
@@ -295,17 +297,10 @@ export default {
295297
}
296298
}
297299
}
298-
const resourceDetailsFields = []
299300
if (this.resource.hypervisor === 'KVM') {
300-
resourceDetailsFields.push('rootDiskController')
301+
this.detailsFields.push('rootDiskController')
301302
} else if (this.resource.hypervisor === 'VMware' && !this.resource.deployasis) {
302-
resourceDetailsFields.push(...['rootDiskController', 'nicAdapter', 'keyboard'])
303-
}
304-
for (var detailsField of resourceDetailsFields) {
305-
var detailValue = this.resource?.details?.[detailsField] || null
306-
if (detailValue) {
307-
this.form[detailValue] = fieldValue
308-
}
303+
this.detailsFields.push(...['rootDiskController', 'nicAdapter', 'keyboard'])
309304
}
310305
},
311306
fetchData () {
@@ -316,6 +311,7 @@ export default {
316311
this.fetchKeyboardTypes()
317312
this.fetchUserdata()
318313
this.fetchUserdataPolicy()
314+
this.fetchDetails()
319315
},
320316
isValidValueForKey (obj, key) {
321317
if (this.emptyAllowedFields.includes(key) && obj[key] === '') {
@@ -360,6 +356,10 @@ export default {
360356
id: 'virtio',
361357
description: 'virtio'
362358
})
359+
controller.push({
360+
id: 'virtio-blk',
361+
description: 'virtio-blk'
362+
})
363363
} else if (hyperVisor === 'VMware') {
364364
controller.push({
365365
id: '',
@@ -486,6 +486,25 @@ export default {
486486
this.userdata.loading = false
487487
})
488488
},
489+
fetchDetails () {
490+
const params = {}
491+
params.id = this.resource.id
492+
params.templatefilter = 'all'
493+
494+
api('listTemplates', params).then(response => {
495+
if (response?.listtemplatesresponse?.template?.length > 0) {
496+
this.details = response.listtemplatesresponse.template[0].details
497+
if (this.details) {
498+
for (var detailsField of this.detailsFields) {
499+
var detailValue = this.details?.[detailsField] || null
500+
if (detailValue) {
501+
this.form[detailsField] = detailValue
502+
}
503+
}
504+
}
505+
}
506+
})
507+
},
489508
handleSubmit (e) {
490509
e.preventDefault()
491510
if (this.loading) return
@@ -495,10 +514,14 @@ export default {
495514
const params = {
496515
id: this.resource.id
497516
}
498-
const detailsField = ['rootDiskController', 'nicAdapter', 'keyboard']
517+
if (this.details) {
518+
Object.keys(this.details).forEach((detail, index) => {
519+
params['details[0].' + detail] = this.details[detail]
520+
})
521+
}
499522
for (const key in values) {
500523
if (!this.isValidValueForKey(values, key)) continue
501-
if (detailsField.includes(key)) {
524+
if (this.detailsFields.includes(key)) {
502525
params['details[0].' + key] = values[key]
503526
continue
504527
}

0 commit comments

Comments
 (0)