From 04d3cd5b14db7dae4084ae478f8ca853f6081539 Mon Sep 17 00:00:00 2001 From: osddeitf <37999210+osddeitf@users.noreply.github.com> Date: Tue, 20 Apr 2021 22:47:38 +0700 Subject: [PATCH] Add support for viewing 'User-supplied values' of helm release (#1862) Co-authored-by: Sebastian Malton --- src/main/helm/helm-release-manager.ts | 4 +-- src/main/helm/helm-service.ts | 4 +-- src/main/routes/helm-route.ts | 4 +-- .../api/endpoints/helm-releases.api.ts | 4 +-- .../+apps-releases/release-details.tsx | 30 +++++++++++++++---- .../components/dock/upgrade-chart.store.ts | 2 +- 6 files changed, 33 insertions(+), 15 deletions(-) diff --git a/src/main/helm/helm-release-manager.ts b/src/main/helm/helm-release-manager.ts index 58a4e99798..822b939cf7 100644 --- a/src/main/helm/helm-release-manager.ts +++ b/src/main/helm/helm-release-manager.ts @@ -91,9 +91,9 @@ export class HelmReleaseManager { return stdout; } - public async getValues(name: string, namespace: string, pathToKubeconfig: string) { + public async getValues(name: string, namespace: string, all: boolean, pathToKubeconfig: string) { const helm = await helmCli.binaryPath(); - const { stdout, } = await promiseExec(`"${helm}" get values ${name} --all --output yaml --namespace ${namespace} --kubeconfig ${pathToKubeconfig}`).catch((error) => { throw(error.stderr);}); + const { stdout, } = await promiseExec(`"${helm}" get values ${name} ${all? "--all": ""} --output yaml --namespace ${namespace} --kubeconfig ${pathToKubeconfig}`).catch((error) => { throw(error.stderr);}); return stdout; } diff --git a/src/main/helm/helm-service.ts b/src/main/helm/helm-service.ts index 9682e58a84..69e8fa2ccb 100644 --- a/src/main/helm/helm-service.ts +++ b/src/main/helm/helm-service.ts @@ -66,12 +66,12 @@ class HelmService { return await releaseManager.getRelease(releaseName, namespace, cluster); } - public async getReleaseValues(cluster: Cluster, releaseName: string, namespace: string) { + public async getReleaseValues(cluster: Cluster, releaseName: string, namespace: string, all: boolean) { const proxyKubeconfig = await cluster.getProxyKubeconfigPath(); logger.debug("Fetch release values"); - return await releaseManager.getValues(releaseName, namespace, proxyKubeconfig); + return await releaseManager.getValues(releaseName, namespace, all, proxyKubeconfig); } public async getReleaseHistory(cluster: Cluster, releaseName: string, namespace: string) { diff --git a/src/main/routes/helm-route.ts b/src/main/routes/helm-route.ts index c3c0bdb353..e530e2edf0 100644 --- a/src/main/routes/helm-route.ts +++ b/src/main/routes/helm-route.ts @@ -101,10 +101,10 @@ class HelmApiRoute extends LensApi { } public async getReleaseValues(request: LensApiRequest) { - const { cluster, params, response } = request; + const { cluster, params, response, query } = request; try { - const result = await helmService.getReleaseValues(cluster, params.release, params.namespace); + const result = await helmService.getReleaseValues(cluster, params.release, params.namespace, query.has("all")); this.respondText(response, result); } catch (error) { diff --git a/src/renderer/api/endpoints/helm-releases.api.ts b/src/renderer/api/endpoints/helm-releases.api.ts index 0bb16ff799..a0556a9a91 100644 --- a/src/renderer/api/endpoints/helm-releases.api.ts +++ b/src/renderer/api/endpoints/helm-releases.api.ts @@ -112,8 +112,8 @@ export async function deleteRelease(name: string, namespace: string): Promise { - const path = `${endpoint({ name, namespace })}/values`; +export async function getReleaseValues(name: string, namespace: string, all?: boolean): Promise { + const path = `${endpoint({ name, namespace })}/values${all? "?all": ""}`; return apiBase.get(path); } diff --git a/src/renderer/components/+apps-releases/release-details.tsx b/src/renderer/components/+apps-releases/release-details.tsx index 626da71b2d..f6b8327151 100644 --- a/src/renderer/components/+apps-releases/release-details.tsx +++ b/src/renderer/components/+apps-releases/release-details.tsx @@ -25,6 +25,7 @@ import { SubTitle } from "../layout/sub-title"; import { secretsStore } from "../+config-secrets/secrets.store"; import { Secret } from "../../api/endpoints"; import { getDetailsUrl } from "../kube-object"; +import { Checkbox } from "../checkbox"; interface Props { release: HelmRelease; @@ -35,6 +36,8 @@ interface Props { export class ReleaseDetails extends Component { @observable details: IReleaseDetails; @observable values = ""; + @observable valuesLoading = false; + @observable userSuppliedOnly = false; @observable saving = false; @observable releaseSecret: Secret; @@ -72,7 +75,9 @@ export class ReleaseDetails extends Component { const { release } = this.props; this.values = ""; - this.values = await getReleaseValues(release.getName(), release.getNs()); + this.valuesLoading = true; + this.values = (await getReleaseValues(release.getName(), release.getNs(), !this.userSuppliedOnly)) ?? ""; + this.valuesLoading = false; } updateValues = async () => { @@ -107,21 +112,34 @@ export class ReleaseDetails extends Component { }; renderValues() { - const { values, saving } = this; + const { values, valuesLoading, saving } = this; return (
- this.values = values} + { + this.userSuppliedOnly = values; + this.loadValues(); + }} + disabled={valuesLoading} /> + {valuesLoading + ? + : this.values = values} + /> + }
diff --git a/src/renderer/components/dock/upgrade-chart.store.ts b/src/renderer/components/dock/upgrade-chart.store.ts index d2573f42e2..656902d5fe 100644 --- a/src/renderer/components/dock/upgrade-chart.store.ts +++ b/src/renderer/components/dock/upgrade-chart.store.ts @@ -89,7 +89,7 @@ export class UpgradeChartStore extends DockTabStore { async loadValues(tabId: TabId) { this.values.clearData(tabId); // reset const { releaseName, releaseNamespace } = this.getData(tabId); - const values = await getReleaseValues(releaseName, releaseNamespace); + const values = await getReleaseValues(releaseName, releaseNamespace, true); this.values.setData(tabId, values); }