mirror of https://github.com/apache/cloudstack.git
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
This commit is contained in:
parent
6bed3d4e64
commit
ce42ce54c2
|
|
@ -145,8 +145,8 @@ public abstract class BaseUpdateTemplateOrIsoCmd extends BaseCmd {
|
|||
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() {
|
||||
|
|
|
|||
|
|
@ -459,7 +459,7 @@ public class VMTemplateDaoImpl extends GenericDaoBase<VMTemplateVO, Long> implem
|
|||
if (detailsStr == null) {
|
||||
return;
|
||||
}
|
||||
List<VMTemplateDetailVO> details = new ArrayList<VMTemplateDetailVO>();
|
||||
List<VMTemplateDetailVO> 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 class VMTemplateDaoImpl extends GenericDaoBase<VMTemplateVO, Long> implem
|
|||
}
|
||||
|
||||
if (tmplt.getDetails() != null) {
|
||||
List<VMTemplateDetailVO> details = new ArrayList<VMTemplateDetailVO>();
|
||||
List<VMTemplateDetailVO> details = new ArrayList<>();
|
||||
for (String key : tmplt.getDetails().keySet()) {
|
||||
details.add(new VMTemplateDetailVO(tmplt.getId(), key, tmplt.getDetails().get(key), true));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2210,7 +2210,7 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
|
|||
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 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
|
|||
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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -245,7 +245,9 @@ export default {
|
|||
userdataid: null,
|
||||
userdatapolicy: null,
|
||||
userdatapolicylist: {},
|
||||
architectureTypes: {}
|
||||
architectureTypes: {},
|
||||
detailsFields: [],
|
||||
details: {}
|
||||
}
|
||||
},
|
||||
beforeCreate () {
|
||||
|
|
@ -295,17 +297,10 @@ export default {
|
|||
}
|
||||
}
|
||||
}
|
||||
const resourceDetailsFields = []
|
||||
if (this.resource.hypervisor === 'KVM') {
|
||||
resourceDetailsFields.push('rootDiskController')
|
||||
this.detailsFields.push('rootDiskController')
|
||||
} else if (this.resource.hypervisor === 'VMware' && !this.resource.deployasis) {
|
||||
resourceDetailsFields.push(...['rootDiskController', 'nicAdapter', 'keyboard'])
|
||||
}
|
||||
for (var detailsField of resourceDetailsFields) {
|
||||
var detailValue = this.resource?.details?.[detailsField] || null
|
||||
if (detailValue) {
|
||||
this.form[detailValue] = fieldValue
|
||||
}
|
||||
this.detailsFields.push(...['rootDiskController', 'nicAdapter', 'keyboard'])
|
||||
}
|
||||
},
|
||||
fetchData () {
|
||||
|
|
@ -316,6 +311,7 @@ export default {
|
|||
this.fetchKeyboardTypes()
|
||||
this.fetchUserdata()
|
||||
this.fetchUserdataPolicy()
|
||||
this.fetchDetails()
|
||||
},
|
||||
isValidValueForKey (obj, key) {
|
||||
if (this.emptyAllowedFields.includes(key) && obj[key] === '') {
|
||||
|
|
@ -360,6 +356,10 @@ export default {
|
|||
id: 'virtio',
|
||||
description: 'virtio'
|
||||
})
|
||||
controller.push({
|
||||
id: 'virtio-blk',
|
||||
description: 'virtio-blk'
|
||||
})
|
||||
} else if (hyperVisor === 'VMware') {
|
||||
controller.push({
|
||||
id: '',
|
||||
|
|
@ -486,6 +486,25 @@ export default {
|
|||
this.userdata.loading = false
|
||||
})
|
||||
},
|
||||
fetchDetails () {
|
||||
const params = {}
|
||||
params.id = this.resource.id
|
||||
params.templatefilter = 'all'
|
||||
|
||||
api('listTemplates', params).then(response => {
|
||||
if (response?.listtemplatesresponse?.template?.length > 0) {
|
||||
this.details = response.listtemplatesresponse.template[0].details
|
||||
if (this.details) {
|
||||
for (var detailsField of this.detailsFields) {
|
||||
var detailValue = this.details?.[detailsField] || null
|
||||
if (detailValue) {
|
||||
this.form[detailsField] = detailValue
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
handleSubmit (e) {
|
||||
e.preventDefault()
|
||||
if (this.loading) return
|
||||
|
|
@ -495,10 +514,14 @@ export default {
|
|||
const params = {
|
||||
id: this.resource.id
|
||||
}
|
||||
const detailsField = ['rootDiskController', 'nicAdapter', 'keyboard']
|
||||
if (this.details) {
|
||||
Object.keys(this.details).forEach((detail, index) => {
|
||||
params['details[0].' + detail] = this.details[detail]
|
||||
})
|
||||
}
|
||||
for (const key in values) {
|
||||
if (!this.isValidValueForKey(values, key)) continue
|
||||
if (detailsField.includes(key)) {
|
||||
if (this.detailsFields.includes(key)) {
|
||||
params['details[0].' + key] = values[key]
|
||||
continue
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue