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 @@
-
+
-
+
-
+ { this.isVpc = val }" />
+
+
+
+
+
+
+
+ {{ $t('Public LB') }}
+
+
+ {{ $t('Internal LB') }}
+
+
-
+
-
+
-
+
@@ -205,7 +223,7 @@
@@ -245,27 +263,55 @@
-
+
-
+
-
+
-
+
-
+
+
+
+
+ {{ $t('optional') }}
+
+
+ {{ $t('required') }}
+
+
+
+
+
+
+ {{ $t('Allow') }}
+
+
+ {{ $t('Deny') }}
+
+
+
- { this.isPublic = val }" />
+ { this.isPublic = val }" />
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)
})
},