From b09acb8fd05d9b8bdf93bc817a95a1f4ed53af77 Mon Sep 17 00:00:00 2001 From: Nicolas Vazquez Date: Wed, 25 Oct 2023 01:58:42 -0300 Subject: [PATCH] UI: Fix deploy VM wizard vApp properties (#8072) This PR fixes the vApp properties values sent as part of the deployVirtualMachine API through the UI Fixes: #7998 --- ui/src/views/compute/DeployVM.vue | 125 ++++++++++++++++-------------- 1 file changed, 65 insertions(+), 60 deletions(-) diff --git a/ui/src/views/compute/DeployVM.vue b/ui/src/views/compute/DeployVM.vue index 5a962a37f36..9d07cb51db3 100644 --- a/ui/src/views/compute/DeployVM.vue +++ b/ui/src/views/compute/DeployVM.vue @@ -470,13 +470,13 @@ @@ -485,7 +485,7 @@ @@ -1509,61 +1509,7 @@ export default { }) } - if (this.vm.templateid && this.templateProperties && Object.keys(this.templateProperties).length > 0) { - this.templateProperties.forEach((props, category) => { - props.forEach((property, propertyIndex) => { - if (property.type && property.type === 'boolean') { - this.form['properties.' + this.escapePropertyKey(property.key)] = property.value === 'TRUE' - } else if (property.type && (property.type === 'int' || property.type === 'real')) { - this.form['properties.' + this.escapePropertyKey(property.key)] = property.value - } else if (property.type && property.type === 'string' && property.qualifiers && property.qualifiers.startsWith('ValueMap')) { - this.form['properties.' + this.escapePropertyKey(property.key)] = property.value && property.value.length > 0 - ? property.value - : this.getPropertyQualifiers(property.qualifiers, 'select')[0] - } else if (property.type && property.type === 'string' && property.password) { - this.form['properties.' + this.escapePropertyKey(property.key)] = property.value - this.rules['properties.' + this.escapePropertyKey(property.key)] = [{ - validator: async (rule, value) => { - if (!property.qualifiers) { - return Promise.resolve() - } - var minlength = this.getPropertyQualifiers(property.qualifiers, 'number-select').min - var maxlength = this.getPropertyQualifiers(property.qualifiers, 'number-select').max - var errorMessage = '' - var isPasswordInvalidLength = function () { - return false - } - if (minlength) { - errorMessage = this.$t('message.validate.minlength').replace('{0}', minlength) - isPasswordInvalidLength = function () { - return !value || value.length < minlength - } - } - if (maxlength !== Number.MAX_SAFE_INTEGER) { - if (minlength) { - errorMessage = this.$t('message.validate.range.length').replace('{0}', minlength).replace('{1}', maxlength) - isPasswordInvalidLength = function () { - return !value || (maxlength < value.length || value.length < minlength) - } - } else { - errorMessage = this.$t('message.validate.maxlength').replace('{0}', maxlength) - isPasswordInvalidLength = function () { - return !value || value.length > maxlength - } - } - } - if (isPasswordInvalidLength()) { - return Promise.reject(errorMessage) - } - return Promise.resolve() - } - }] - } else { - this.form['properties.' + this.escapePropertyKey(property.key)] = property.value - } - }) - }) - } + this.updateFormProperties() if (this.vm.templateid && this.templateLicenses && this.templateLicenses.length > 0) { this.rules.licensesaccepted = [{ @@ -2582,6 +2528,64 @@ export default { this.dataPreFill.memory = params.memory this.handleSearchFilter('serviceOfferings', params) }, + updateFormProperties () { + if (this.vm.templateid && this.templateProperties && Object.keys(this.templateProperties).length > 0) { + this.form.properties = {} + Object.keys(this.templateProperties).forEach((category, categoryIndex) => { + this.templateProperties[category].forEach((property, _) => { + if (property.type && property.type === 'boolean') { + this.form.properties[this.escapePropertyKey(property.key)] = property.value === 'TRUE' + } else if (property.type && (property.type === 'int' || property.type === 'real')) { + this.form.properties[this.escapePropertyKey(property.key)] = property.value + } else if (property.type && property.type === 'string' && property.qualifiers && property.qualifiers.startsWith('ValueMap')) { + this.form.properties[this.escapePropertyKey(property.key)] = property.value && property.value.length > 0 + ? property.value + : this.getPropertyQualifiers(property.qualifiers, 'select')[0] + } else if (property.type && property.type === 'string' && property.password) { + this.form.properties[this.escapePropertyKey(property.key)] = property.value + this.rules['properties.' + this.escapePropertyKey(property.key)] = [{ + validator: async (rule, value) => { + if (!property.qualifiers) { + return Promise.resolve() + } + var minlength = this.getPropertyQualifiers(property.qualifiers, 'number-select').min + var maxlength = this.getPropertyQualifiers(property.qualifiers, 'number-select').max + var errorMessage = '' + var isPasswordInvalidLength = function () { + return false + } + if (minlength) { + errorMessage = this.$t('message.validate.minlength').replace('{0}', minlength) + isPasswordInvalidLength = function () { + return !value || value.length < minlength + } + } + if (maxlength !== Number.MAX_SAFE_INTEGER) { + if (minlength) { + errorMessage = this.$t('message.validate.range.length').replace('{0}', minlength).replace('{1}', maxlength) + isPasswordInvalidLength = function () { + return !value || (maxlength < value.length || value.length < minlength) + } + } else { + errorMessage = this.$t('message.validate.maxlength').replace('{0}', maxlength) + isPasswordInvalidLength = function () { + return !value || value.length > maxlength + } + } + } + if (isPasswordInvalidLength()) { + return Promise.reject(errorMessage) + } + return Promise.resolve() + } + }] + } else { + this.form.properties[this.escapePropertyKey(property.key)] = property.value + } + }) + }) + } + }, updateTemplateParameters () { if (this.template) { this.templateNics = this.fetchTemplateNics(this.template) @@ -2599,6 +2603,7 @@ export default { this.updateComputeOffering(null) // reset as existing selection may be incompatible } }, 500) + this.updateFormProperties() } }, onSelectTemplateConfigurationId (value) {