From 938ba42df2115a1e7d94746ef8b107cddfeb6a6d Mon Sep 17 00:00:00 2001 From: Waseem Abbas Date: Wed, 25 Sep 2024 14:33:29 +0500 Subject: [PATCH] Fix default CNI application values in cluster wizard (#6884) --- .../component.ts | 44 ++++--------------- .../src/app/wizard/step/cluster/component.ts | 28 +++++++----- 2 files changed, 27 insertions(+), 45 deletions(-) diff --git a/modules/web/src/app/wizard/step/cluster/cilium-application-values-dialog/component.ts b/modules/web/src/app/wizard/step/cluster/cilium-application-values-dialog/component.ts index ae47d2f51e..96aca4e133 100644 --- a/modules/web/src/app/wizard/step/cluster/cilium-application-values-dialog/component.ts +++ b/modules/web/src/app/wizard/step/cluster/cilium-application-values-dialog/component.ts @@ -14,11 +14,9 @@ import {Component, Inject, OnDestroy, OnInit} from '@angular/core'; import {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog'; -import {ApplicationService} from '@core/services/application'; import * as y from 'js-yaml'; import _ from 'lodash'; import {Subject} from 'rxjs'; -import {finalize, takeUntil} from 'rxjs/operators'; export interface CiliumApplicationValuesDialogData { applicationValues?: string; // JSON encoded string @@ -41,20 +39,14 @@ export class CiliumApplicationValuesDialogComponent implements OnInit, OnDestroy isLoadingDetails: boolean; private readonly _unsubscribe = new Subject(); - private readonly _applicationName = 'cilium'; constructor( public dialogRef: MatDialogRef, - private readonly _applicationService: ApplicationService, @Inject(MAT_DIALOG_DATA) private data: CiliumApplicationValuesDialogData ) {} ngOnInit(): void { - if (this.data.applicationValues) { - this._initValuesConfig(this.data.applicationValues); - } else { - this._loadApplicationDefinitionDetails(); - } + this._initValuesConfig(this.data.applicationValues); } ngOnDestroy(): void { @@ -70,35 +62,17 @@ export class CiliumApplicationValuesDialogComponent implements OnInit, OnDestroy this.dialogRef.close(this._getEncodedConfig()); } - private _loadApplicationDefinitionDetails() { - this.isLoadingDetails = true; - this._applicationService - .getApplicationDefinition(this._applicationName) - .pipe( - takeUntil(this._unsubscribe), - finalize(() => (this.isLoadingDetails = false)) - ) - .subscribe({ - next: appDef => { - this._initValuesConfig(appDef.spec.defaultValues); - }, - error: _ => {}, - }); - } - - private _initValuesConfig(valuesConfig: string | object): void { + /** + * Initializes the values for editor + * @param valuesConfig JSON encoded string + * @private + */ + private _initValuesConfig(valuesConfig: string): void { this.valuesConfig = ''; - if (typeof valuesConfig === 'string') { - try { - valuesConfig = JSON.parse(valuesConfig); - } catch (_) { - this.valuesConfig = ''; - } - } if (!_.isEmpty(valuesConfig)) { try { - this.valuesConfig = y.dump(valuesConfig); - } catch (e) { + this.valuesConfig = y.dump(JSON.parse(valuesConfig)); + } catch (_) { this.valuesConfig = ''; } } diff --git a/modules/web/src/app/wizard/step/cluster/component.ts b/modules/web/src/app/wizard/step/cluster/component.ts index be0afa4ffa..129272ee57 100644 --- a/modules/web/src/app/wizard/step/cluster/component.ts +++ b/modules/web/src/app/wizard/step/cluster/component.ts @@ -69,6 +69,7 @@ import { import {getEditionVersion} from '@shared/utils/common'; import {AsyncValidators} from '@shared/validators/async.validators'; import {KmValidators} from '@shared/validators/validators'; +import * as y from 'js-yaml'; import _ from 'lodash'; import {combineLatest, merge, Subscription} from 'rxjs'; import {filter, finalize, switchMap, take, takeUntil, tap} from 'rxjs/operators'; @@ -173,6 +174,7 @@ export class ClusterStepComponent extends StepBase implements OnInit, ControlVal loadingClusterDefaults = false; canEditCNIValues: boolean; cniApplicationValues: string; + defaultCNIApplicationValues: string; backupStorageLocationsList: BackupStorageLocation[]; backupStorageLocationLabel: BSLListState = BSLListState.Ready; provider: NodeProvider; @@ -442,7 +444,9 @@ export class ClusterStepComponent extends StepBase implements OnInit, ControlVal this._applicationService .getApplicationDefinition(this._cniCiliumApplicationName) .pipe(takeUntil(this._unsubscribe)) - .subscribe(appDef => (this.cniApplicationValues = this.initializeCiliumValues(appDef.spec.defaultValues))); + .subscribe( + appDef => (this.defaultCNIApplicationValues = this.initializeCiliumValues(appDef.spec.defaultValuesBlock)) + ); } this.control(Controls.CiliumIngress) @@ -533,7 +537,7 @@ export class ClusterStepComponent extends StepBase implements OnInit, ControlVal editCNIValues() { const dialogData = { data: { - applicationValues: this.cniApplicationValues, + applicationValues: this.cniApplicationValues || this.defaultCNIApplicationValues, } as CiliumApplicationValuesDialogData, }; const dialogRef = this._matDialog.open(CiliumApplicationValuesDialogComponent, dialogData); @@ -948,7 +952,7 @@ export class ClusterStepComponent extends StepBase implements OnInit, ControlVal private updateCiliumCNIValues(): void { const ciliumIngress = this.controlValue(Controls.CiliumIngress); if (ciliumIngress) { - let cniApplicationValues = JSON.parse(this.cniApplicationValues); + let cniApplicationValues = JSON.parse(this.cniApplicationValues || this.defaultCNIApplicationValues); cniApplicationValues = { ...cniApplicationValues, ingressController: { @@ -960,7 +964,7 @@ export class ClusterStepComponent extends StepBase implements OnInit, ControlVal }; this.cniApplicationValues = JSON.stringify(cniApplicationValues); } else { - const cniApplicationValues = JSON.parse(this.cniApplicationValues); + const cniApplicationValues = JSON.parse(this.cniApplicationValues || this.defaultCNIApplicationValues); delete cniApplicationValues.ingressController; this.cniApplicationValues = JSON.stringify(cniApplicationValues); } @@ -1101,13 +1105,17 @@ export class ClusterStepComponent extends StepBase implements OnInit, ControlVal return null; } - private initializeCiliumValues(valuesConfig: string | object): string { - if (typeof valuesConfig === 'string') { - return valuesConfig; - } + private initializeCiliumValues(valuesConfig: string): string { if (!_.isEmpty(valuesConfig)) { - return JSON.stringify(valuesConfig); + try { + let raw = y.load(valuesConfig); + raw = !_.isEmpty(raw) ? raw : {}; + + return JSON.stringify(raw); + } catch (_) { + return ''; + } } - return null; + return ''; } }