Skip to content

Commit

Permalink
Fix default CNI application values in cluster wizard (kubermatic#6884)
Browse files Browse the repository at this point in the history
  • Loading branch information
Waseem826 authored Sep 25, 2024
1 parent 95591cc commit 938ba42
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 45 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -41,20 +39,14 @@ export class CiliumApplicationValuesDialogComponent implements OnInit, OnDestroy
isLoadingDetails: boolean;

private readonly _unsubscribe = new Subject<void>();
private readonly _applicationName = 'cilium';

constructor(
public dialogRef: MatDialogRef<CiliumApplicationValuesDialogComponent>,
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 {
Expand All @@ -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 = '';
}
}
Expand Down
28 changes: 18 additions & 10 deletions modules/web/src/app/wizard/step/cluster/component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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: {
Expand All @@ -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);
}
Expand Down Expand Up @@ -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 '';
}
}

0 comments on commit 938ba42

Please sign in to comment.