From a3151ed0af8a320ec2e2818197e3552696dfe3e6 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Fri, 14 Feb 2020 13:33:47 +0530 Subject: [PATCH] wip netowrk offering form handling Signed-off-by: Abhishek Kumar Signed-off-by: Rohit Yadav --- ui/src/views/offering/AddNetworkOffering.vue | 332 ++++++++++++++++--- 1 file changed, 282 insertions(+), 50 deletions(-) diff --git a/ui/src/views/offering/AddNetworkOffering.vue b/ui/src/views/offering/AddNetworkOffering.vue index 601e84be126..97db9e48156 100644 --- a/ui/src/views/offering/AddNetworkOffering.vue +++ b/ui/src/views/offering/AddNetworkOffering.vue @@ -71,13 +71,30 @@ - + - + - + + + + + + + + + {{ $t('Public LB') }} + + + {{ $t('Internal LB') }} + + - + - + - + @@ -205,7 +223,7 @@ @@ -245,27 +263,55 @@ - + - + - + - + - + + + + + {{ $t('optional') }} + + + {{ $t('required') }} + + + + + + + {{ $t('Allow') }} + + + {{ $t('Deny') }} + + + - + 0 && obj.constructor === Object && 'provider' in obj) + }, fetchDomainData () { const params = {} params.listAll = true @@ -430,46 +482,49 @@ export default { for (var i in this.supportedServices) { var networkServiceObj = this.supportedServices[i] var serviceName = networkServiceObj.name - var serviceDisplayName = '' + var serviceDisplayName = serviceName // Sanitize names - switch (serviceName) { - case 'Vpn': - serviceDisplayName = this.$t('label.vpn') - break - case 'Dhcp': - serviceDisplayName = this.$t('label.dhcp') - break - case 'Dns': - serviceDisplayName = this.$t('label.dns') - break - case 'Lb': - serviceDisplayName = this.$t('label.load.balancer') - break - case 'SourceNat': - serviceDisplayName = this.$t('label.source.nat') - break - case 'StaticNat': - serviceDisplayName = this.$t('label.static.nat') - break - case 'PortForwarding': - serviceDisplayName = this.$t('label.port.forwarding') - break - case 'UserData': - serviceDisplayName = this.$t('label.user.data') - break - case 'Connectivity': - serviceDisplayName = this.$t('label.virtual.networking') - break - default: - serviceDisplayName = serviceName - break - } + // switch (serviceName) { + // case 'Vpn': + // serviceDisplayName = this.$t('label.vpn') + // break + // case 'Dhcp': + // serviceDisplayName = this.$t('label.dhcp') + // break + // case 'Dns': + // serviceDisplayName = this.$t('label.dns') + // break + // case 'Lb': + // serviceDisplayName = this.$t('label.load.balancer') + // break + // case 'SourceNat': + // serviceDisplayName = this.$t('label.source.nat') + // break + // case 'StaticNat': + // serviceDisplayName = this.$t('label.static.nat') + // break + // case 'PortForwarding': + // serviceDisplayName = this.$t('label.port.forwarding') + // break + // case 'UserData': + // serviceDisplayName = this.$t('label.user.data') + // break + // case 'Connectivity': + // serviceDisplayName = this.$t('label.virtual.networking') + // break + // default: + // serviceDisplayName = serviceName + // break + // } var providers = [] for (var j in this.supportedServices[i].provider) { var provider = this.supportedServices[i].provider[j] provider.description = provider.name provider.enabled = provider.canenableindividualservice + if (provider.name === 'VpcVirtualRouter') { + provider.enabled = false + } if (provider.name === 'VirtualRouter') { providers.unshift(provider) } else { @@ -536,7 +591,184 @@ export default { if (err) { return } + console.log(values) var params = {} + + var keys = Object.keys(values) + var ignoredKeys = ['state', 'status', 'allocationstate', 'forvpc', 'specifyvlan', 'ispublic', 'domainid', 'zoneid', 'egressdefaultpolicy', 'promiscuousmode', 'macaddresschanges', 'forgedtransmits'] + for (var i in keys) { + var key = keys[i] + if (!ignoredKeys.includes(key) && + !this.isSupportedServiceObject(values[key]) && + (key === 'availability' && values.availability !== 'Optional')) { + params[key] = values[key] + } + } + + if (values.guesttype === 'Shared') { // specifyVlan checkbox is disabled, so inputData won't include specifyVlan + params.specifyvlan = values.specifyvlan + params.specifyipranges = true + delete params.isPersistent // if Persistent checkbox is unchecked, do not pass isPersistent parameter to API call since we need to keep API call's size as small as possible (p.s. isPersistent is defaulted as false at server-side) + } else if (values.guesttype === 'Isolated') { // specifyVlan checkbox is shown + if (values.specifyvlan === true) { + params.specifyvlan = true + } + if (values.ispersistent === true) { + params.ispersistent = true + } else { // Isolated Network with Non-persistent network + delete params.ispersistent + } + } else if (values.guesttype === 'L2') { + if (values.specifyvlan === true) { + params.specifyvlan = true + } + if (values.userdatal2 === true) { + params['serviceProviderList[0].service'] = 'UserData' + params['serviceProviderList[0].provider'] = 'ConfigDrive' + params.supportedservices = 'UserData' + } + // Conserve mode is irrelevant on L2 network offerings as there are no resources to conserve, do not pass it, true by default on server side + delete params.conservemode + } + + if (values.forvpc === true) { + params.forvpc = true + } + if (values.guesttype === 'Shared' || values.guesttype === 'Isolated') { + if (values.conservemode !== true) { // if ConserveMode checkbox is checked, do not pass conservemode parameter to API call since we need to keep API call's size as small as possible (p.s. conservemode is defaulted as true at server-side) + params.conservemode = false + } + } + var selectedServices = null + if (values.guesttype !== 'L2') { + values.label + } + if (selectedServices != null) { + var supportedServices = Object.keys(selectedServices) + params.supportedservices = supportedServices.join(',') + for (var k in supportedServices) { + params['serviceProviderList[' + k + '].service'] = supportedServices[k] + params['serviceProviderList[' + k + '].provider'] = selectedServices[supportedServices[k]].provider + } + var serviceCapabilityIndex = 0 + if (supportedServices.includes('Connectivity')) { + if (values.supportsstrechedl2subnet === true) { + params['serviceCapabilityList[' + serviceCapabilityIndex + '].service'] = 'Connectivity' + params['serviceCapabilityList[' + serviceCapabilityIndex + '].capabilitytype'] = 'RegionLevelVpc' + params['serviceCapabilityList[' + serviceCapabilityIndex + '].capabilityvalue'] = true + serviceCapabilityIndex++ + } + if (values.supportspublicaccess === true) { + params['serviceCapabilityList[' + serviceCapabilityIndex + '].service'] = 'Connectivity' + params['serviceCapabilityList[' + serviceCapabilityIndex + '].capabilitytype'] = 'DistributedRouter' + params['serviceCapabilityList[' + serviceCapabilityIndex + '].capabilityvalue'] = true + serviceCapabilityIndex++ + } + delete params.supportsstrechedl2subnet + delete params.supportspublicaccess + } + if (supportedServices.includes('SourceNat')) { + if (values.redundantroutercapability === true) { + params['serviceCapabilityList[' + serviceCapabilityIndex + '].service'] = 'SourceNat' + params['serviceCapabilityList[' + serviceCapabilityIndex + '].capabilitytype'] = 'RedundantRouter' + params['serviceCapabilityList[' + serviceCapabilityIndex + '].capabilityvalue'] = true + serviceCapabilityIndex++ + } + params['servicecapabilitylist[' + serviceCapabilityIndex + '].service'] = 'SourceNat' + params['servicecapabilitylist[' + serviceCapabilityIndex + '].capabilitytype'] = 'SupportedSourceNatTypes' + params['servicecapabilitylist[' + serviceCapabilityIndex + '].capabilityvalue'] = values.sourcenattype + serviceCapabilityIndex++ + delete params.redundantroutercapability + delete params.sourcenattype + } + if (supportedServices.includes('SourceNat')) { + if (values.elasticip === true) { + params['servicecapabilitylist[' + serviceCapabilityIndex + '].service'] = 'StaticNat' + params['servicecapabilitylist[' + serviceCapabilityIndex + '].capabilitytype'] = 'ElasticIp' + params['servicecapabilitylist[' + serviceCapabilityIndex + '].capabilityvalue'] = true + serviceCapabilityIndex++ + } + if (values.elasticip === true || values.associatepublicip === true) { + params['servicecapabilitylist[' + serviceCapabilityIndex + '].service'] = 'StaticNat' + params['servicecapabilitylist[' + serviceCapabilityIndex + '].capabilitytype'] = 'associatePublicIP' + params['servicecapabilitylist[' + serviceCapabilityIndex + '].capabilityvalue'] = values.associatepublicip + serviceCapabilityIndex++ + } + delete params.elasticip + delete params.associatepublicip + } + if (supportedServices.includes('Lb')) { + if (values.elasticlb === true) { + params['servicecapabilitylist[' + serviceCapabilityIndex + '].service'] = 'lb' + params['servicecapabilitylist[' + serviceCapabilityIndex + '].capabilitytype'] = 'ElasticLb' + params['servicecapabilitylist[' + serviceCapabilityIndex + '].capabilityvalue'] = true + serviceCapabilityIndex++ + } + if (values.inlinemode === true && ((selectedServices.Lb.provider === 'F5BigIp') || (selectedServices.Lb.provider === 'Netscaler'))) { + params['servicecapabilitylist[' + serviceCapabilityIndex + '].service'] = 'lb' + params['servicecapabilitylist[' + serviceCapabilityIndex + '].capabilitytype'] = 'InlineMode' + params['servicecapabilitylist[' + serviceCapabilityIndex + '].capabilityvalue'] = values.inlinemode + serviceCapabilityIndex++ + } + params['servicecapabilitylist[' + serviceCapabilityIndex + '].service'] = 'lb' + params['servicecapabilitylist[' + serviceCapabilityIndex + '].capabilitytype'] = 'SupportedLbIsolation' + params['servicecapabilitylist[' + serviceCapabilityIndex + '].capabilityvalue'] = values.isolation + serviceCapabilityIndex++ + if (selectedServices.Lb.provider === 'InternalLbVm') { + params['servicecapabilitylist[' + serviceCapabilityIndex + '].service'] = 'lb' + params['servicecapabilitylist[' + serviceCapabilityIndex + '].capabilitytype'] = 'lbSchemes' + params['servicecapabilitylist[' + serviceCapabilityIndex + '].capabilityvalue'] = 'internal' + serviceCapabilityIndex++ + } + if ('netscalerservicepackages' in values && + this.registeredServicePackages.length > values.netscalerservicepackages && + 'netscalerservicepackagesdescription' in values) { + params['details[' + 0 + '].servicepackageuuid'] = this.registeredServicePackages[values.netscalerservicepackages].id + params['details[' + 1 + '].servicepackagedescription'] = values.netscalerservicepackagesdescription + } + } + } + + if ('egressdefaultpolicy' in values && values.egressdefaultpolicy !== 'allow') { + params.egressdefaultpolicy = false // do not pass egressdefaultpolicy unnecessarily to API call since we need to keep API call's size as small as possible (p.s. egressdefaultpolicy is defaulted as true at server-side) + } + if ('promiscuousmode' in values) { + params['details[0].promiscuousMode'] = values.promiscuousmode + } + if ('macaddresschanges' in values) { + params['details[0].macaddresschanges'] = values.macaddresschanges + } + if ('forgedtransmits' in values) { + params['details[0].forgedtransmits'] = values.forgedtransmits + } + if (values.ispublic !== true) { + var domainIndexes = values.domainid + var domainId = null + if (domainIndexes && domainIndexes.length > 0) { + var domainIds = [] + for (var i = 0; i < domainIndexes.length; i++) { + domainIds = domainIds.concat(this.domains[domainIndexes[i]].id) + } + domainId = domainIds.join(',') + } + if (domainId) { + params.domainid = domainId + } + } + var zoneIndexes = values.zoneid + var zoneId = null + if (zoneIndexes && zoneIndexes.length > 0) { + var zoneIds = [] + for (var j = 0; j < zoneIndexes.length; j++) { + zoneIds = zoneIds.concat(this.zones[zoneIndexes[j]].id) + } + zoneId = zoneIds.join(',') + } + if (zoneId) { + params.zoneid = zoneId + } + values.traffictype = 'GUEST' // traffic type dropdown has been removed since it has only one option ('Guest'). Hardcode traffic type value here. + console.log(params) }) },