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 076576a1e..be5f68b2c 100644 --- a/lib/shared/addon/components/cluster-driver/driver-googlegke/component.js +++ b/lib/shared/addon/components/cluster-driver/driver-googlegke/component.js @@ -100,7 +100,7 @@ export default Component.extend(ClusterDriver, { let config = get(this, 'cluster.googleKubernetesEngineConfig'); if ( !config ) { - config = this.get('globalStore').createRecord({ + config = get(this, 'globalStore').createRecord({ type: 'googleKubernetesEngineConfig', diskSizeGb: 100, enableAlphaFeature: false, @@ -112,6 +112,7 @@ export default Component.extend(ClusterDriver, { maxNodeCount: 1, imageType: 'UBUNTU', diskType: 'pd-standard', + taints: [], }); setProperties(this, { @@ -136,8 +137,47 @@ export default Component.extend(ClusterDriver, { stackdriverTrace: 'trace.append', cloudSourceRepositories: 'none', cloudDebugger: 'none' + }, + resourceLabels: [], + labels: [], + taints: [], + }) + } else { + const { + resourceLabels = [], labels = [], taints = [] + } = config + let map = {} + + if (resourceLabels) { + resourceLabels.map((t = '') => { + const split = t.split('=') + + set(map, split[0], split[1]) + }) + set(this, 'resourceLabels', map) + } + + if (labels) { + labels.map((t = '') => { + const split = t.split('=') + + set(map, split[0], split[1]) + }) + set(this, 'labels', map) + } + + let _taints = taints.map((t = '') => { + const splitEffect = t.split(':') + const splitLabel = (splitEffect[1] || '').split('=') + + return { + effect: splitEffect[0], + key: splitLabel[0], + value: splitLabel[1], } }) + + set(this, 'taints', _taints) } set(this, 'initialMasterVersion', get(this, 'config.masterVersion')); @@ -167,13 +207,21 @@ export default Component.extend(ClusterDriver, { }, setLabels(section) { - const out = section.filter((f) => f.key && f.value).map((s) => `${ s.key }=${ s.value }`) + const out = [] + + for (let key in section) { + out.pushObject(`${ key }=${ section[key] }`) + } set(this, 'config.resourceLabels', out); }, setNodeLabels(section) { - const out = section.filter((f) => f.key && f.value).map((s) => `${ s.key }=${ s.value }`) + const out = [] + + for (let key in section) { + out.pushObject(`${ key }=${ section[key] }`) + } set(this, 'config.labels', out); }, @@ -181,6 +229,11 @@ export default Component.extend(ClusterDriver, { updateNameservers(nameservers) { set(this, 'config.masterAuthorizedNetworkCidrBlocks', nameservers); }, + + setTaints(value) { + console.log(value, 'value') + set(this, 'config.taints', value); + }, }, credentialChanged: observer('config.credential', function() { @@ -510,10 +563,8 @@ export default Component.extend(ClusterDriver, { validate() { const model = get(this, 'cluster'); const errors = model.validationErrors(); - const intl = get(this, 'intl') - - const minNodeCount = get(this, 'config.minNodeCount') - const maxNodeCount = get(this, 'config.maxNodeCount') + const { intl, config = {} } = this + const { minNodeCount, maxNodeCount } = config if (maxNodeCount < minNodeCount) { errors.pushObject(intl.t('clusterNew.googlegke.maxNodeCount.minError')) @@ -523,6 +574,16 @@ export default Component.extend(ClusterDriver, { errors.pushObject(intl.t('clusterNew.name.required')) } + const taints = get(this, 'taints') || [] + + if (taints.length > 0) { + const filter = taints.filter((t) => !t.key || !t.value) + + if (filter.length > 0) { + errors.pushObject(intl.t('clusterNew.googlegke.taints.required')) + } + } + set(this, 'errors', errors); return errors.length === 0; @@ -545,7 +606,6 @@ export default Component.extend(ClusterDriver, { if (!get(this, 'config.useIpAliases')) { setProperties(config, { ipPolicyCreateSubnetwork: false, - network: null, ipPolicyClusterSecondaryRangeName: null, ipPolicyClusterIpv4CidrBlock: null, ipPolicyServicesSecondaryRangeName: null, @@ -599,6 +659,14 @@ export default Component.extend(ClusterDriver, { set(config, 'oauthScopes', arr) } + const taints = get(this, 'taints') || [] + + if (taints.length > 0) { + set(config, 'taints', taints.map((t) => { + return `${ t.effect }:${ t.key }=${ t.value }` + })) + } + setProperties(config, { issueClientCertificate: true, enablePrivateNodes: get(config, 'enablePrivateEndpoint'), 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 3a17fa3f0..6fa8f4c27 100644 --- a/lib/shared/addon/components/cluster-driver/driver-googlegke/template.hbs +++ b/lib/shared/addon/components/cluster-driver/driver-googlegke/template.hbs @@ -428,13 +428,13 @@ {{#if config.enableMasterAuthorizedNetwork}}
| {{t 'clusterNew.googlegke.taints.effect.label'}} | ++ | {{t 'clusterNew.googlegke.taints.key.label'}}{{field-required}} | ++ | {{t 'clusterNew.googlegke.taints.value.label'}}{{field-required}} | ++ |
|---|---|---|---|---|---|
| + {{#input-or-display + editable=editable + value=taint.effect + }} + {{searchable-select + class="form-control" + content=effectContent + value=taint.effect + }} + {{/input-or-display}} + | ++ + | + {{#input-or-display + editable=editable + value=taint.key + }} + {{input + class="form-control" + value=taint.key + placeholder=(t "clusterNew.googlegke.taints.key.placeholder") + }} + {{/input-or-display}} + | ++ + | + {{#input-or-display + editable=editable + value=taint.value + }} + {{input + class="form-control" + value=taint.value + placeholder=(t "clusterNew.googlegke.taints.value.placeholder") + }} + {{/input-or-display}} + | + ++ + | +