diff --git a/lib/shared/addon/components/cluster-driver/driver-googlegke/component.js b/lib/shared/addon/components/cluster-driver/driver-googlegke/component.js index 46303d125..8ad717294 100644 --- a/lib/shared/addon/components/cluster-driver/driver-googlegke/component.js +++ b/lib/shared/addon/components/cluster-driver/driver-googlegke/component.js @@ -1,15 +1,15 @@ import Component from '@ember/component' import ClusterDriver from 'shared/mixins/cluster-driver'; import layout from './template'; - import { get, set, computed, observer, setProperties } from '@ember/object'; import { sortableNumericSuffix } from 'shared/utils/util'; import { reject, all } from 'rsvp'; import { inject as service } from '@ember/service'; -import { equal } from '@ember/object/computed' +import { equal } from '@ember/object/computed'; import $ from 'jquery'; +import { isEmpty } from '@ember/utils'; const times = [ { @@ -211,19 +211,21 @@ export default Component.extend(ClusterDriver, { if ( !config ) { config = get(this, 'globalStore').createRecord({ - type: 'googleKubernetesEngineConfig', - diskSizeGb: 100, - enableAlphaFeature: false, - nodeCount: 3, - machineType: 'n1-standard-2', - zone: 'us-central1-f', - clusterIpv4Cidr: '', - minNodeCount: 1, - maxNodeCount: 5, - imageType: 'UBUNTU', - diskType: 'pd-standard', - region: 'us-west2', - taints: [], + type: 'googleKubernetesEngineConfig', + diskSizeGb: 100, + enableAlphaFeature: false, + nodeCount: 3, + machineType: 'n1-standard-2', + zone: 'us-central1-f', + clusterIpv4Cidr: '', + minNodeCount: 1, + maxNodeCount: 5, + imageType: 'UBUNTU', + diskType: 'pd-standard', + region: 'us-west2', + taints: [], + useIpAliases: true, + ipPolicyCreateSubnetwork: true, }); setProperties(this, { @@ -448,8 +450,14 @@ export default Component.extend(ClusterDriver, { const subNetworkContent = get(this, 'subNetworkContent') || [] - if (subNetworkContent.length > 0) { - set(this, 'config.subNetwork', subNetworkContent[0] && subNetworkContent[0].value) + if (subNetworkContent.length > 1) { + const firstNonNullSubnetMatch = subNetworkContent.find((sn) => !isEmpty(sn.value)); + + setProperties(this, { + 'config.subNetwork': firstNonNullSubnetMatch.value, + 'config.ipPolicyCreateSubnetwork': false, + }) + const secondaryIpRangeContent = get(this, 'secondaryIpRangeContent') || [] if (secondaryIpRangeContent.length > 0) { @@ -463,6 +471,20 @@ export default Component.extend(ClusterDriver, { } }), + subnetworkChange: observer('config.subNetwork', function() { + if (this.saving) { + return; + } + + const { config: { subNetwork } } = this; + + if (isEmpty(subNetwork)) { + set(this, 'config.ipPolicyCreateSubnetwork', true); + } else { + set(this, 'config.ipPolicyCreateSubnetwork', false); + } + }), + secondaryIpRangeContentChange: observer('secondaryIpRangeContent.[]', 'config.useIpAliases', function() { if (this.saving) { return; @@ -480,8 +502,15 @@ export default Component.extend(ClusterDriver, { return; } - if (!get(this, 'config.useIpAliases')) { - set(this, 'config.enablePrivateNodes', false) + if (get(this, 'config.useIpAliases')) { + if (!isEmpty(this.config.subNetwork)) { + set(this, 'config.ipPolicyCreateSubnetwork', false); + } + } else { + setProperties(this, { + 'config.enablePrivateNodes': false, + 'config.ipPolicyCreateSubnetwork': false, + }); } }), @@ -544,43 +573,62 @@ export default Component.extend(ClusterDriver, { return zoneChoices.filter((z) => (z.name || '').startsWith(locationName) && z.name !== zone) }), - networkContent: computed('networks', function() { + networkContent: computed('networks', 'config.zone', function() { return get(this, 'networks') }), - subNetworkContent: computed('subNetworks.[]', 'config.network', function() { - const subNetworks = get(this, 'subNetworks') || [] - const networkName = get(this, 'config.network') + subNetworkContent: computed('subNetworks.[]', 'config.network', 'config.zone', function() { + const { + config: { network: networkName }, + networkContent, + subNetworks = [], + } = this; - const out = subNetworks.filter((s) => { - const { network = '' } = s - const arr = network.split('/') || [] - const networkDisplayName = arr[arr.length - 1] + const filteredSubnets = (subNetworks || []).filter((s) => { + const network = networkContent.findBy('selfLink', s.network); + const networkDisplayName = network.name; if (networkDisplayName === networkName) { return true } - }) + }); + + const mappedSubnets = filteredSubnets.map((o) => { + const network = networkContent.findBy('selfLink', o.network); + const networkDisplayName = network.name; - return out.map((o) => { return { label: `${ o.name }(${ o.ipCidrRange })`, value: o.name, secondaryIpRanges: o.secondaryIpRanges, + networkDisplayName } - }) + }); + + const defaultSubnetAry = [{ + label: this.intl.t('clusterNew.googlegke.ipPolicyCreateSubnetwork.autoLabel'), + value: '', + }]; + + return [...defaultSubnetAry, ...mappedSubnets]; }), secondaryIpRangeContent: computed('subNetworkContent.[]', 'config.network', function() { - const subNetworkContent = get(this, 'subNetworkContent') - const { secondaryIpRanges = [] } = subNetworkContent + const { subNetworkContent = [], config: { network } } = this; + const subNetwork = subNetworkContent.findBy('networkDisplayName', network); - return secondaryIpRanges.map((s) => { - return { - lable: `${ s.rangeName }(${ s.ipCidrRange })`, - value: s.rangeName, - } - }) + if (subNetwork) { + const { secondaryIpRanges = [] } = subNetwork; + + return secondaryIpRanges.map((s) => { + return { + label: `${ s.rangeName }(${ s.ipCidrRange })`, + value: s.rangeName, + } + }); + } + + return []; }), serviceAccountContent: computed('serviceAccounts', function() { @@ -593,6 +641,24 @@ export default Component.extend(ClusterDriver, { return get(this, 'maintenanceWindowTimes').findBy('value', get(this, 'config.maintenanceWindow')) || { label: 'Any Time' }; }), + shouldAllowDisableCreateSubNetwork: computed('config.subNetwork', function() { + const { + config: { subNetwork }, + secondaryIpRangeContent, + editing, + } = this; + + if (isEmpty(subNetwork)) { + return true; + } + + if (editing && isEmpty(secondaryIpRangeContent)) { + return true; + } + + return false; + }), + fetchZones() { return get(this, 'globalStore').rawRequest({ url: '/meta/gkeZones', diff --git a/lib/shared/addon/components/cluster-driver/driver-googlegke/template.hbs b/lib/shared/addon/components/cluster-driver/driver-googlegke/template.hbs index bda9b28a6..efbe0d032 100644 --- a/lib/shared/addon/components/cluster-driver/driver-googlegke/template.hbs +++ b/lib/shared/addon/components/cluster-driver/driver-googlegke/template.hbs @@ -315,14 +315,16 @@ selection=config.enableHorizontalPodAutoscaling value=true disabled=editing - }} {{t "generic.enabled"}} + }} + {{t "generic.enabled"}} @@ -345,6 +347,7 @@ +
- {{#advanced-section advanced=clusterAdvanced}} -

{{t "clusterNew.googlegke.header.iPAllocationPolicy"}}

-
-
-
-