From 4cca41b32bd131e17e99050cffa4020827900663 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Thu, 22 Dec 2022 14:05:24 -0500 Subject: [PATCH] Make rollbackHelmRelease injectable Signed-off-by: Sebastian Malton --- src/main/getDiForUnitTesting.ts | 2 - src/main/helm/helm-release-manager.ts | 23 ------------ .../rollback-helm-release.injectable.ts | 24 +++++------- .../helm/rollback-helm-release.injectable.ts | 37 +++++++++++++++++++ .../rollback-release-route.injectable.ts | 10 ++--- 5 files changed, 52 insertions(+), 44 deletions(-) delete mode 100644 src/main/helm/helm-release-manager.ts create mode 100644 src/main/helm/rollback-helm-release.injectable.ts diff --git a/src/main/getDiForUnitTesting.ts b/src/main/getDiForUnitTesting.ts index f5ef0b0505..f75a6726bf 100644 --- a/src/main/getDiForUnitTesting.ts +++ b/src/main/getDiForUnitTesting.ts @@ -57,7 +57,6 @@ import normalizedPlatformArchitectureInjectable from "../common/vars/normalized- import getHelmChartVersionsInjectable from "./helm/helm-service/get-helm-chart-versions.injectable"; import getHelmChartValuesInjectable from "./helm/helm-service/get-helm-chart-values.injectable"; import listHelmChartsInjectable from "./helm/helm-service/list-helm-charts.injectable"; -import rollbackHelmReleaseInjectable from "./helm/helm-service/rollback-helm-release.injectable"; import waitUntilBundledExtensionsAreLoadedInjectable from "./start-main-application/lens-window/application-window/wait-until-bundled-extensions-are-loaded.injectable"; import { registerMobX } from "@ogre-tools/injectable-extension-for-mobx"; import electronInjectable from "./utils/resolve-system-proxy/electron.injectable"; @@ -134,7 +133,6 @@ export function getDiForUnitTesting(opts: { doGeneralOverrides?: boolean } = {}) getHelmChartVersionsInjectable, getHelmChartValuesInjectable, listHelmChartsInjectable, - rollbackHelmReleaseInjectable, writeJsonFileInjectable, readJsonFileInjectable, readFileInjectable, diff --git a/src/main/helm/helm-release-manager.ts b/src/main/helm/helm-release-manager.ts deleted file mode 100644 index e0cac1c1e2..0000000000 --- a/src/main/helm/helm-release-manager.ts +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -import { asLegacyGlobalFunctionForExtensionApi } from "../../extensions/as-legacy-globals-for-extension-api/as-legacy-global-function-for-extension-api"; -import execHelmInjectable from "./exec-helm/exec-helm.injectable"; - -const execHelm = asLegacyGlobalFunctionForExtensionApi(execHelmInjectable); - -export async function rollback(name: string, namespace: string, revision: number, kubeconfigPath: string): Promise { - const result = await execHelm([ - "rollback", - name, - `${revision}`, - "--namespace", namespace, - "--kubeconfig", kubeconfigPath, - ]); - - if (!result.callWasSuccessful) { - throw result.error; - } -} diff --git a/src/main/helm/helm-service/rollback-helm-release.injectable.ts b/src/main/helm/helm-service/rollback-helm-release.injectable.ts index 62ee05463d..a426de8f1c 100644 --- a/src/main/helm/helm-service/rollback-helm-release.injectable.ts +++ b/src/main/helm/helm-service/rollback-helm-release.injectable.ts @@ -5,28 +5,24 @@ import { getInjectable } from "@ogre-tools/injectable"; import type { Cluster } from "../../../common/cluster/cluster"; import loggerInjectable from "../../../common/logger.injectable"; -import { rollback } from "../helm-release-manager"; +import type { RollbackHelmReleaseData } from "../rollback-helm-release.injectable"; +import rollbackHelmReleaseInjectable from "../rollback-helm-release.injectable"; -const rollbackHelmReleaseInjectable = getInjectable({ - id: "rollback-helm-release", +const rollbackClusterHelmReleaseInjectable = getInjectable({ + id: "rollback-cluster-helm-release", instantiate: (di) => { const logger = di.inject(loggerInjectable); + const rollbackHelmRelease = di.inject(rollbackHelmReleaseInjectable); - return async ( - cluster: Cluster, - releaseName: string, - namespace: string, - revision: number, - ) => { + return async (cluster: Cluster, data: RollbackHelmReleaseData) => { const proxyKubeconfig = await cluster.getProxyKubeconfigPath(); - logger.debug("Rollback release"); - await rollback(releaseName, namespace, revision, proxyKubeconfig); + logger.debug(`[CLUSTER]: rolling back helm release for clusterId=${cluster.id}`, data); + + await rollbackHelmRelease(proxyKubeconfig, data); }; }, - - causesSideEffects: true, }); -export default rollbackHelmReleaseInjectable; +export default rollbackClusterHelmReleaseInjectable; diff --git a/src/main/helm/rollback-helm-release.injectable.ts b/src/main/helm/rollback-helm-release.injectable.ts new file mode 100644 index 0000000000..2b130adfb5 --- /dev/null +++ b/src/main/helm/rollback-helm-release.injectable.ts @@ -0,0 +1,37 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import execHelmInjectable from "./exec-helm/exec-helm.injectable"; + +export interface RollbackHelmReleaseData { + name: string; + namespace: string; + revision: number; +} + +export type RollbackHelmRelease = (kubeconfigPath: string, data: RollbackHelmReleaseData) => Promise; + +const rollbackHelmReleaseInjectable = getInjectable({ + id: "rollback-helm-release", + instantiate: (di): RollbackHelmRelease => { + const execHelm = di.inject(execHelmInjectable); + + return async (kubeconfigPath, { name, namespace, revision }) => { + const result = await execHelm([ + "rollback", + name, + `${revision}`, + "--namespace", namespace, + "--kubeconfig", kubeconfigPath, + ]); + + if (!result.callWasSuccessful) { + throw result.error; + } + }; + }, +}); + +export default rollbackHelmReleaseInjectable; diff --git a/src/main/routes/helm/releases/rollback-release-route.injectable.ts b/src/main/routes/helm/releases/rollback-release-route.injectable.ts index eb27b675c4..49a8fddb88 100644 --- a/src/main/routes/helm/releases/rollback-release-route.injectable.ts +++ b/src/main/routes/helm/releases/rollback-release-route.injectable.ts @@ -6,7 +6,7 @@ import { apiPrefix } from "../../../../common/vars"; import { getRouteInjectable } from "../../../router/router.injectable"; import Joi from "joi"; import { payloadValidatedClusterRoute } from "../../../router/route"; -import rollbackHelmReleaseInjectable from "../../../helm/helm-service/rollback-helm-release.injectable"; +import rollbackClusterHelmReleaseInjectable from "../../../helm/helm-service/rollback-helm-release.injectable"; interface RollbackReleasePayload { revision: number; @@ -22,14 +22,14 @@ const rollbackReleaseRouteInjectable = getRouteInjectable({ id: "rollback-release-route", instantiate: (di) => { - const rollbackRelease = di.inject(rollbackHelmReleaseInjectable); + const rollbackRelease = di.inject(rollbackClusterHelmReleaseInjectable); return payloadValidatedClusterRoute({ method: "put", - path: `${apiPrefix}/v2/releases/{namespace}/{release}/rollback`, + path: `${apiPrefix}/v2/releases/{namespace}/{name}/rollback`, payloadValidator: rollbackReleasePayloadValidator, - })(async ({ cluster, params: { release, namespace }, payload }) => { - await rollbackRelease(cluster, release, namespace, payload.revision); + })(async ({ cluster, params, payload }) => { + await rollbackRelease(cluster, { ...params, ...payload }); }); }, });