diff --git a/lib/shared/addon/components/cluster-driver/driver-gke/component.js b/lib/shared/addon/components/cluster-driver/driver-gke/component.js
index 7000a10082..d1a7910392 100644
--- a/lib/shared/addon/components/cluster-driver/driver-gke/component.js
+++ b/lib/shared/addon/components/cluster-driver/driver-gke/component.js
@@ -242,9 +242,6 @@ export default Component.extend(ClusterDriver, {
}
}
- if (isEmpty(config.kubernetesVersion)) {
- set(this, 'config.kubernetesVersion', versions?.defaultClusterVersion);
- }
cb(true);
}).catch((err) => {
@@ -275,6 +272,14 @@ export default Component.extend(ClusterDriver, {
},
},
+ versionChoicesChanged: observer('versionChoices.[]', 'config.kubernetesVersion', 'versions.{validMasterVersions,channels}', function(){
+ const { config, versionChoices } = this;
+
+ if (isEmpty(config.kubernetesVersion)) {
+ set(this, 'config.kubernetesVersion', versionChoices[0].value);
+ }
+ }),
+
networkPolicyEnabledChanged: observer('config.networkPolicyEnabled', function() {
if (get(this, 'isNew') && get(this, 'config.networkPolicyEnabled')) {
set(this, 'config.clusterAddons.networkPolicyConfig', true);
@@ -860,9 +865,7 @@ export default Component.extend(ClusterDriver, {
}
}
- if (isEmpty(initialVersion)) {
- initialVersion = validMasterVersions[0];
- }
+
if (this.editing && !validMasterVersions.includes(initialVersion)) {
validMasterVersions.unshift(initialVersion);
@@ -871,6 +874,11 @@ export default Component.extend(ClusterDriver, {
Semver.rsort(validMasterVersions, { includePrerelease: true });
const versionChoices = this.serviceVersions.parseCloudProviderVersionChoicesV2(validMasterVersions.slice(), initialVersion, mode, null, false, MINIMUM_VERSION);
+ if (isEmpty(initialVersion)) {
+ initialVersion = versionChoices[0]?.value;
+ }
+
+
if (this.editing) {
try {
const initialSem = Semver.parse(initialVersion, { includePrerelease: true });
diff --git a/lib/shared/addon/components/gke-node-pool-row/component.js b/lib/shared/addon/components/gke-node-pool-row/component.js
index b5851d6f0f..af2f70d8c6 100644
--- a/lib/shared/addon/components/gke-node-pool-row/component.js
+++ b/lib/shared/addon/components/gke-node-pool-row/component.js
@@ -27,15 +27,12 @@ export default Component.extend({
nodeVersions: null,
clusterVersion: null,
upgradeVersion: false,
+ originalPoolVersion: null,
init() {
this._super(...arguments);
- const {
- nodePool,
- clusterVersion,
- defaultClusterVersion
- } = this;
+ const { nodePool } = this;
setProperties(this, {
scopeConfig: {},
@@ -54,8 +51,8 @@ export default Component.extend({
}
}
- if (isEmpty(nodePool?.version) && !isEmpty(clusterVersion)) {
- set(this, 'nodePool.version', defaultClusterVersion);
+ if (nodePool.version){
+ set(this, 'originalPoolVersion', nodePool.version)
}
} else {
setProperties(this, {
@@ -87,15 +84,6 @@ export default Component.extend({
this.send('updateScopes');
}),
- editingUpdateNodeVersion: observer('isNewNodePool', 'clusterVersion', function() {
- const { isNewNodePool, clusterVersion } = this;
- const nodeVersion = get(this, 'nodePool.version');
-
- if (isNewNodePool && clusterVersion !== nodeVersion) {
- set(this, 'nodePool.version', clusterVersion);
- }
- }),
-
autoscalingChanged: observer('nodePool.autoscaling.enabled', function() {
if (this.isDestroyed || this.isDestroying) {
return;
@@ -124,6 +112,31 @@ export default Component.extend({
}
}),
+ // if true, set np.version to latest version <= cp version
+ // if false, revert np.version
+ upgradeVersionChanged: observer('upgradeVersion', 'maxAvailableVersion', function() {
+ const {
+ upgradeVersion, originalPoolVersion, nodePool, maxAvailableVersion
+ } = this
+
+ if (upgradeVersion){
+ set(nodePool, 'version', maxAvailableVersion)
+ } else {
+ set(nodePool, 'version', originalPoolVersion)
+ }
+ }),
+
+ // if the pool is new, keep version in sync with cp version
+ clusterVersionChanged: on('init', observer('clusterVersion', 'maxAvailableVersion', function(){
+ const {
+ maxAvailableVersion, isNewNodePool, nodePool
+ } = this;
+
+ if (isNewNodePool && maxAvailableVersion !== nodePool.version){
+ set(nodePool, 'version', maxAvailableVersion)
+ }
+ })),
+
scopeConfigChanged: on('init', observer('scopeConfig', function() {
if (this.isDestroyed || this.isDestroying) {
return;
@@ -181,26 +194,43 @@ export default Component.extend({
return '';
}),
- upgradeAvailable: computed('clusterVersion', 'mode', 'nodePool.version', 'defaultClusterVersion', function() {
- const { clusterVersion, defaultClusterVersion } = this;
- const nodeVersion = get(this, 'nodePool.version');
+ clusterWillUpgrade: computed('clusterVersion', 'originalClusterVersion', function(){
+ const { clusterVersion, originalClusterVersion } = this;
- if (isEmpty(clusterVersion) || isEmpty(nodeVersion)) {
- return false;
- }
+ return !!clusterVersion && !!originalClusterVersion && clusterVersion !== originalClusterVersion
+ }),
- const nodeIsLess = Semver.lt(nodeVersion, clusterVersion, { includePrerelease: true });
- const clusterVersionIsAlsoTheMaxVersion = clusterVersion === defaultClusterVersion;
+ isNewNodePool: computed('nodePool.isNew', function() {
+ return this?.nodePool?.isNew ? true : false;
+ }),
- if (nodeIsLess && clusterVersionIsAlsoTheMaxVersion) {
- return true;
- }
+ /**
+ * This property is used to show/hide a np version upgrade checkbox
+ * when the box is checked the np is upgraded to latest node version that is <= cp version
+ * with new node pools, the version is always kept in sync with the cp version so no checkbox shown
+ */
+ upgradeAvailable: computed('isNewNodePool', 'clusterWillUpgrade', function(){
+ const { isNewNodePool, clusterWillUpgrade } = this;
- return false;
+ return !isNewNodePool && clusterWillUpgrade
}),
- isNewNodePool: computed('nodePool.isNew', function() {
- return this?.nodePool?.isNew ? true : false;
+
+ // GCP api provides a separate list of versions for node pools, which can be upgraded to anything <= control plane version
+ maxAvailableVersion: computed('clusterVersion', 'nodeVersions.[]', function() {
+ const { clusterVersion, nodeVersions } = this;
+
+ const availableVersions = nodeVersions.filter((nv) => {
+ try {
+ const lteCP = Semver.lte(nv, clusterVersion, { includePreRelease: true })
+
+ return lteCP
+ } catch {
+ return
+ }
+ })
+
+ return availableVersions[0]
}),
editedMachineChoice: computed('nodePool.config.machineType', 'machineChoices', function() {
@@ -221,14 +251,4 @@ export default Component.extend({
return out.sortBy('sortName')
}),
-
- shouldUpgradeVersion: on('init', observer('upgradeVersion', 'clusterVersion', function() {
- const { upgradeVersion, clusterVersion } = this;
- const nodeVersion = get(this, 'nodePool.version');
-
- if (upgradeVersion && clusterVersion !== nodeVersion) {
- set(this, 'nodePool.version', clusterVersion);
- }
- })),
-
});
diff --git a/lib/shared/addon/components/gke-node-pool-row/template.hbs b/lib/shared/addon/components/gke-node-pool-row/template.hbs
index 1a0bc372e1..6f87b6b8aa 100644
--- a/lib/shared/addon/components/gke-node-pool-row/template.hbs
+++ b/lib/shared/addon/components/gke-node-pool-row/template.hbs
@@ -19,11 +19,6 @@
- {{!--