This is an automated email from the ASF dual-hosted git repository. pearl11594 pushed a commit to branch netris-phase2-vpc in repository https://gitbox.apache.org/repos/asf/cloudstack.git
commit d347a6afb0b51fac309217bab5c19360245a01f1 Author: Pearl Dsilva <pearl1...@gmail.com> AuthorDate: Mon Sep 23 15:29:40 2024 -0400 add steps to zone wizard for adding netris controller and public traffic --- ui/public/locales/en.json | 2 + ui/src/views/infra/zone/IpAddressRangeForm.vue | 18 ++++++-- ui/src/views/infra/zone/ZoneWizard.vue | 2 +- ui/src/views/infra/zone/ZoneWizardLaunchZone.vue | 52 +++++++++++++++++++++- .../infra/zone/ZoneWizardNetworkSetupStep.vue | 29 +++++++++--- 5 files changed, 91 insertions(+), 12 deletions(-) diff --git a/ui/public/locales/en.json b/ui/public/locales/en.json index 6f21a51305b..43e8407fe9c 100644 --- a/ui/public/locales/en.json +++ b/ui/public/locales/en.json @@ -1770,6 +1770,7 @@ "label.public.ips": "Public IP addresses", "label.public.lb": "Public LB", "label.public.traffic": "Public traffic", +"label.public.traffic.netris": "Netris Public traffic", "label.public.traffic.nsx": "NSX Public traffic", "label.publicinterface": "Public interface", "label.publicip": "IP address", @@ -2233,6 +2234,7 @@ "label.systemvm": "System VM", "label.systemvmtype": "System VM type", "label.tag": "Tag", +"label.tag.netris": "netris", "label.tag.nsx": "nsx", "label.tag.key": "Tag key", "label.tag.systemvm": "systemvm", diff --git a/ui/src/views/infra/zone/IpAddressRangeForm.vue b/ui/src/views/infra/zone/IpAddressRangeForm.vue index c39534d7b93..04d7ad4152f 100644 --- a/ui/src/views/infra/zone/IpAddressRangeForm.vue +++ b/ui/src/views/infra/zone/IpAddressRangeForm.vue @@ -34,12 +34,13 @@ <template v-if="column.key === 'gateway'"> <div> {{ record.gateway }}</div> <div v-if="record.fornsx"> <a-tag color="processing"> {{ $t('label.tag.nsx') }} </a-tag> </div> - <div v-else-if="isNsxZone"> <a-tag color="processing"> {{ $t('label.tag.systemvm') }} </a-tag> </div> + <div v-else-if="record.fornetris"> <a-tag color="processing"> {{ $t('label.tag.netris') }} </a-tag> </div> + <div v-else-if="isNsxZone || isNetrisZone"> <a-tag color="processing"> {{ $t('label.tag.systemvm') }} </a-tag> </div> </template> <template v-if="column.key === 'actions'"> <tooltip-button :tooltip="$t('label.delete')" - :disabled="(record.fornsx && !forNsx) || (!record.fornsx && forNsx)" + :disabled="((record.fornsx && !forNsx) || (!record.fornsx && forNsx)) || ((record.fornetris && !forNetris) || (!record.fornetris && forNetris)) " type="primary" :danger="true" icon="delete-outlined" @@ -76,7 +77,7 @@ <a-form-item name="vlan" ref="vlan"> <a-input v-model:value="form.vlan" - :disabled="forNsx" + :disabled="forNsx || forNetris" :placeholder="$t('label.vlan')" /> </a-form-item> @@ -175,6 +176,14 @@ export default { isNsxZone: { type: Boolean, default: false + }, + forNetris: { + type: Boolean, + default: false + }, + isNetrisZone: { + type: Boolean, + default: false } }, data () { @@ -271,7 +280,8 @@ export default { startIp: values.startIp, endIp: values.endIp, fornsx: this.forNsx, - forsystemvms: this.isNsxZone && !this.forNsx + fornetris: this.forNetris, + forsystemvms: (this.isNsxZone && !this.forNsx) || (this.isNetrisZone && !this.forNetris) }) this.formRef.value.resetFields() }).catch(error => { diff --git a/ui/src/views/infra/zone/ZoneWizard.vue b/ui/src/views/infra/zone/ZoneWizard.vue index 9211aed92a5..a580da9ba36 100644 --- a/ui/src/views/infra/zone/ZoneWizard.vue +++ b/ui/src/views/infra/zone/ZoneWizard.vue @@ -139,7 +139,7 @@ export default { { name: 'network', title: 'label.network', - step: ['physicalNetwork', 'nsx', 'tungsten', 'netscaler', 'pod', 'guestTraffic', 'storageTraffic', 'publicTraffic', 'nsxPublicTraffic'], + step: ['physicalNetwork', 'nsx', 'netris', 'tungsten', 'netscaler', 'pod', 'guestTraffic', 'storageTraffic', 'publicTraffic', 'nsxPublicTraffic', 'netrisPublixTraffic'], description: this.$t('message.network.description'), hint: this.$t('message.network.hint') }, diff --git a/ui/src/views/infra/zone/ZoneWizardLaunchZone.vue b/ui/src/views/infra/zone/ZoneWizardLaunchZone.vue index e562fb33d72..91b884072a7 100644 --- a/ui/src/views/infra/zone/ZoneWizardLaunchZone.vue +++ b/ui/src/views/infra/zone/ZoneWizardLaunchZone.vue @@ -125,6 +125,7 @@ export default { launching: 'message.please.wait.while.zone.is.being.created' }, nsx: false, + netris: false, isLaunchZone: false, processStatus: null, messageError: '', @@ -218,6 +219,7 @@ export default { const index = this.steps.findIndex(step => step.index === this.currentStep) this.steps[index].status = status this.nsx = false + this.netris = false }, handleBack (e) { this.$emit('backPressed') @@ -487,7 +489,10 @@ export default { if (physicalNetwork.isolationMethod === 'NSX' && physicalNetwork.traffics.findIndex(traffic => traffic.type === 'public' || traffic.type === 'guest') > -1) { this.stepData.isNsxZone = true - this.stepData.tungstenPhysicalNetworkId = physicalNetworkReturned.id + } + if (physicalNetwork.isolationMethod === 'NETRIS' && + physicalNetwork.traffics.findIndex(traffic => traffic.type === 'public' || traffic.type === 'guest') > -1) { + this.stepData.isNetrisZone = true } } else { this.stepData.physicalNetworkReturned = this.stepData.physicalNetworkItem['createPhysicalNetwork' + index] @@ -909,6 +914,8 @@ export default { this.addStep(message, trafficType) if (trafficType === 'nsxPublicTraffic') { this.nsx = false + } else if (trafficType === 'netrisPublicTraffic') { + this.netris = false } let stopNow = false @@ -937,7 +944,7 @@ export default { params.zoneId = this.stepData.zoneReturned.id if (publicVlanIpRange.vlan && publicVlanIpRange.vlan.length > 0) { params.vlan = publicVlanIpRange.vlan - } else if (publicVlanIpRange.fornsx) { + } else if (publicVlanIpRange.fornsx) { // TODO: should this be the same for Netris? params.vlan = null } else { params.vlan = 'untagged' @@ -987,6 +994,8 @@ export default { await this.stepCreateTungstenFabricPublicNetwork() } else if (this.stepData.isNsxZone) { await this.stepAddNsxController() + } else if (this.stepData.isNetrisZone) { + await this.stepAddNetrisController() } else { await this.stepConfigureStorageTraffic() } @@ -1090,6 +1099,35 @@ export default { this.setStepStatus(STATUS_FAILED) } }, + async stepAddNetrisController () { + this.setStepStatus(STATUS_FINISH) + this.currentStep++ + this.addStep('message.add.netris.controller', 'netris') + if (this.stepData.stepMove.includes('netris')) { + await this.stepConfigureStorageTraffic() + return + } + try { + if (!this.stepData.stepMove.includes('addNetrisProvider')) { + const providerParams = {} + providerParams.name = this.prefillContent?.netrisName || '' + providerParams.netrisproviderhostname = this.prefillContent?.netrisHostname || '' + providerParams.netrisproviderport = this.prefillContent?.netrisPort || '' + providerParams.username = this.prefillContent?.username || '' + providerParams.password = this.prefillContent?.password || '' + providerParams.zoneid = this.stepData.zoneReturned.id + + await this.addNetrisProvider(providerParams) + this.stepData.stepMove.push('addNetrisController') + } + this.stepData.stepMove.push('netris') + await this.stepConfigureStorageTraffic() + } catch (e) { + this.messageError = e + this.processStatus = STATUS_FAILED + this.setStepStatus(STATUS_FAILED) + } + }, async stepConfigureStorageTraffic () { let targetNetwork = false this.prefillContent.physicalNetworks.forEach(physicalNetwork => { @@ -2247,6 +2285,16 @@ export default { }) }) }, + addNetrisPovider (args) { + return new Promise((resolve, reject) => { + api('addNetrisProvider', {}, 'POST', args).then(json => { + resolve() + }).catch(error => { + const message = error.response.headers['x-description'] + reject(message) + }) + }) + }, configTungstenFabricService (args) { return new Promise((resolve, reject) => { api('configTungstenFabricService', {}, 'POST', args).then(json => { diff --git a/ui/src/views/infra/zone/ZoneWizardNetworkSetupStep.vue b/ui/src/views/infra/zone/ZoneWizardNetworkSetupStep.vue index dc1ec709fb1..79d50495576 100644 --- a/ui/src/views/infra/zone/ZoneWizardNetworkSetupStep.vue +++ b/ui/src/views/infra/zone/ZoneWizardNetworkSetupStep.vue @@ -51,7 +51,7 @@ :isFixError="isFixError" /> <ip-address-range-form - v-if="steps && ['publicTraffic', 'nsxPublicTraffic'].includes(steps[currentStep].formKey)" + v-if="steps && ['publicTraffic', 'nsxPublicTraffic', 'netrisPublicTraffic'].includes(steps[currentStep].formKey)" @nextPressed="nextPressed" @backPressed="handleBack" @fieldsChanged="fieldsChanged" @@ -62,6 +62,9 @@ :isFixError="isFixError" :forNsx="steps[currentStep].formKey === 'nsxPublicTraffic'" :isNsxZone="isNsxZone" + :forNetris="steps[currentStep].formKey === 'netrisPublicTraffic'" + :isNetrisZone="isNetrisZone" + :provider="providersDetails" /> <static-inputs-form @@ -127,7 +130,7 @@ </div> <div v-else> <advanced-guest-traffic-form - v-if="steps && steps[currentStep].formKey === 'guestTraffic' && !isNsxZone" + v-if="steps && steps[currentStep].formKey === 'guestTraffic' && !isNsxZone && !isNetrisZone" @nextPressed="nextPressed" @backPressed="handleBack" @fieldsChanged="fieldsChanged" @@ -230,7 +233,7 @@ export default { if (!this.prefillContent.physicalNetworks) { isNetris = false } else { - const netrisIdx = this.prefillContent.physicalNetworks.findIndex(network => network.isolationMethod === 'NETRIS') + const netrisIdx = this.prefillContent.physicalNetworks.findIndex(network => network.isolationMethod === 'Netris') isNetris = netrisIdx > -1 } return isNetris @@ -277,11 +280,18 @@ export default { trafficType: 'public' }) } + if (this.isNetrisZone) { + steps.push({ + title: 'label.public.traffic.netris', + formKey: 'netrisPublicTraffic', + trafficType: 'public' + }) + } steps.push({ title: 'label.pod', formKey: 'pod' }) - if (!this.isTungstenZone && !this.isNsxZone) { + if (!this.isTungstenZone && !this.isNsxZone && !this.isNetrisZone) { steps.push({ title: 'label.guest.traffic', formKey: 'guestTraffic', @@ -296,6 +306,15 @@ export default { return steps }, + providersDetails () { + console.log(this.currentStep) + return { + forNsx: this.steps[this.currentStep].formKey === 'nsxPublicTraffic', + isNsxZone: this.isNsxZone, + forNetris: this.steps[this.currentStep].formKey === 'netrisPublicTraffic', + isNetrisZone: this.isNetrisZone + } + }, stepScales () { if (!this.isMobile() && this.steps.length > 4) { return { width: 'calc(100% / ' + this.steps.length + ')' } @@ -622,7 +641,7 @@ export default { } this.scrollToStepActive() if (this.zoneType === 'Basic' || - (this.zoneType === 'Advanced' && (this.sgEnabled || this.isNsxZone))) { + (this.zoneType === 'Advanced' && (this.sgEnabled || this.isNsxZone || this.isNetrisZone))) { this.skipGuestTrafficStep = false } else { this.fetchConfiguration()