From 517962699e85e6d9cc27a18476ee7a3692042a03 Mon Sep 17 00:00:00 2001 From: Mo Mesgin Date: Tue, 6 Aug 2024 16:47:42 -0700 Subject: [PATCH 1/4] update azure cloud provider option based on k8s version support --- .../cru-cloud-provider/component.js | 53 ++++++++++++++++--- .../cru-cloud-provider/template.hbs | 12 ++++- translations/en-us.yaml | 1 + 3 files changed, 59 insertions(+), 7 deletions(-) diff --git a/lib/shared/addon/components/cru-cloud-provider/component.js b/lib/shared/addon/components/cru-cloud-provider/component.js index 3b7374af72..cecbed30fc 100644 --- a/lib/shared/addon/components/cru-cloud-provider/component.js +++ b/lib/shared/addon/components/cru-cloud-provider/component.js @@ -16,6 +16,8 @@ const azureDefaults = C.AZURE_DEFAULTS; const GENERIC_PATH = 'cluster.rancherKubernetesEngineConfig.cloudProvider.cloudConfig'; const AWS_PATH = 'cluster.rancherKubernetesEngineConfig.cloudProvider.awsCloudProvider'; const AZURE_PATH = 'cluster.rancherKubernetesEngineConfig.cloudProvider.azureCloudProvider'; +const AZURE_IN_TREE_MINIMUM_VERSION = 'v1.27.0'; +const AZURE_IN_TREE_DEPRICATE_VERSION = 'v1.30.0'; export default Component.extend({ globalStore: service(), @@ -39,6 +41,7 @@ export default Component.extend({ // track the original configuration to revert the switch to 'external' when the selected provider is not supported initialCloudProvider: null, initialConfigAnswers: null, + showChangedToExternal: false, configName: alias('cluster.rancherKubernetesEngineConfig.cloudProvider.name'), @@ -60,11 +63,14 @@ export default Component.extend({ this.setCpFields(`azureCloudProvider`, reorderedAnswers); + const shouldAllowEditingCloudProvider = this.mode === 'edit' && this.isAzureInTreeSupported; + setProperties(this, { - selectedCloudProvider: 'azure', - configAnswers: reorderedAnswers, - initialCloudProvider: 'azure', - initialConfigAnswers: reorderedAnswers + selectedCloudProvider: 'azure', + configAnswers: reorderedAnswers, + initialCloudProvider: 'azure', + initialConfigAnswers: reorderedAnswers, + unsupportedProviderSelected: shouldAllowEditingCloudProvider }); } else if ( !cloudProviderName ) { set(this, 'selectedCloudProvider', 'none'); @@ -84,6 +90,7 @@ export default Component.extend({ modeChanged: observer('selectedCloudProvider', function() { let selectedCloudProvider = get(this, 'selectedCloudProvider'); + const showChangedToExternal = get(this, 'showChangedToExternal'); if ( selectedCloudProvider !== 'none' ) { this.constructConfig(); @@ -94,6 +101,11 @@ export default Component.extend({ delete config.cloudProvider; } } + + // remove azure warning banner when selection changes + if (selectedCloudProvider !== 'external' && showChangedToExternal) { + set(this, 'showChangedToExternal', false); + } }), harvesterCloudProviderDisabledChange: observer('harvesterCloudProviderDisabled', function() { @@ -104,13 +116,34 @@ export default Component.extend({ k8sVersionDidChange: observer( 'cluster.rancherKubernetesEngineConfig.kubernetesVersion', function(){ const kubernetesVersion = get(this, 'cluster.rancherKubernetesEngineConfig.kubernetesVersion') - const initialCloudProvider = get(this, 'initialCloudProvider') + const initialCloudProvider = get(this, 'initialCloudProvider'); + const selectedCloudProvider = get(this, 'selectedCloudProvider'); + const isAzureCurrentlySelected = selectedCloudProvider === 'azure'; + const isAzureInTreeSupported = get(this, 'isAzureInTreeSupported'); + const showChangedToExternal = get(this, 'showChangedToExternal'); if (initialCloudProvider === 'amazonec2' && Semver.gte(Semver.coerce(kubernetesVersion), '1.27.0')){ set(this, 'unsupportedProviderSelected', true); set(this, 'selectedCloudProvider', 'external-aws'); set(this, 'showChangedToAmazonExternal', true); - this.constructConfig() + this.constructConfig(); + } else if (initialCloudProvider === 'azure') { // Edit mode for Azure + if (!isAzureInTreeSupported && isAzureCurrentlySelected) { + set(this, 'unsupportedProviderSelected', true); + set(this, 'selectedCloudProvider', 'external'); + set(this, 'showChangedToExternal', true); + this.constructConfig(); + } else if (showChangedToExternal) { + set(this, 'showChangedToExternal', false); + } + } else if (isAzureCurrentlySelected) { // Create mode for Azure + if (!isAzureInTreeSupported){ + set(this, 'selectedCloudProvider', 'external'); + set(this, 'showChangedToExternal', true); + this.constructConfig() + } else if (showChangedToExternal) { + set(this, 'showChangedToExternal', false); + } } else if (get(this, 'unsupportedProviderSelected')){ setProperties(this, { unsupportedProviderSelected: false, @@ -118,6 +151,8 @@ export default Component.extend({ selectedCloudProvider: get(this, 'initialCloudProvider'), configAnswers: get(this, 'initialConfigAnswers') }) + } else if (showChangedToExternal) { // Remove azure warning + set(this, 'showChangedToExternal', false); } }), @@ -193,6 +228,12 @@ export default Component.extend({ } }), + isAzureInTreeSupported: computed('cluster.rancherKubernetesEngineConfig.kubernetesVersion', function() { + const kubernetesVersion = get(this, 'cluster.rancherKubernetesEngineConfig.kubernetesVersion'); + + return Semver.satisfies(Semver.coerce(kubernetesVersion), `>=${ AZURE_IN_TREE_MINIMUM_VERSION } <${ AZURE_IN_TREE_DEPRICATE_VERSION }`); + }), + mappedConfigAnswers: computed('configAnswers', function() { const configAnswers = (get(this, 'configAnswers') || {}); const out = []; diff --git a/lib/shared/addon/components/cru-cloud-provider/template.hbs b/lib/shared/addon/components/cru-cloud-provider/template.hbs index 9893317a58..e5d6fb9661 100644 --- a/lib/shared/addon/components/cru-cloud-provider/template.hbs +++ b/lib/shared/addon/components/cru-cloud-provider/template.hbs @@ -39,6 +39,16 @@ @isCreateClusterOrClusterTemplate={{isCreateClusterOrClusterTemplate}} @computedState={{not (eq selectedCloudProvider "none")}} > + {{#if showChangedToExternal}} +
+ +
+ {{/if}} + {{#input-or-display editable=(or (and (eq mode "new") (or (not applyClusterTemplate) (and (eq mode "new") selectedCloudProviderOverrideAvailable))) canEditProvider) value=selectedCloudProvider @@ -89,7 +99,7 @@ {{t "cloudProvider.azure"}} - {{else if isCreateClusterOrClusterTemplate}} + {{else if (and isCreateClusterOrClusterTemplate isAzureInTreeSupported)}}
-

- {{t (get (get azureDescriptions answer.key) "description") htmlSafe=true}} -

+ {{#if (get azureDescriptions answer.key)}} +

+ {{t (get (get azureDescriptions answer.key) "description") htmlSafe=true}} +

+ {{/if}}