diff --git a/packages/core/src/common/cluster-env.injectable.ts b/packages/core/src/common/cluster-env.injectable.ts index b3f44f2db1..2d7a9b141e 100644 --- a/packages/core/src/common/cluster-env.injectable.ts +++ b/packages/core/src/common/cluster-env.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable, lifecycleEnum } from "@ogre-tools/injectable"; import { computed } from "mobx"; import type { Cluster } from "./cluster/cluster"; -import { object } from "./utils"; +import { object } from "@k8slens/utilities"; function isDefinedEntry(entry: readonly [T, string | undefined]): entry is [T, string] { return Boolean(entry[1]); diff --git a/packages/core/src/main/resource-applier/create-resource-applier.injectable.ts b/packages/core/src/main/resource-applier/create-resource-applier.injectable.ts index 245a3551bf..c30c3058b8 100644 --- a/packages/core/src/main/resource-applier/create-resource-applier.injectable.ts +++ b/packages/core/src/main/resource-applier/create-resource-applier.injectable.ts @@ -13,22 +13,21 @@ import { ResourceApplier } from "./resource-applier"; import createKubectlInjectable from "../kubectl/create-kubectl.injectable"; import kubeconfigManagerInjectable from "../kubeconfig-manager/kubeconfig-manager.injectable"; import type { Cluster } from "../../common/cluster/cluster"; +import clusterEnvironmentInjectable from "../../common/cluster-env.injectable"; const resourceApplierInjectable = getInjectable({ id: "resource-applier", - instantiate: (di, cluster) => new ResourceApplier( - { - deleteFile: di.inject(removePathInjectable), - emitAppEvent: di.inject(emitAppEventInjectable), - execFile: di.inject(execFileInjectable), - joinPaths: di.inject(joinPathsInjectable), - logger: di.inject(loggerInjectable), - writeFile: di.inject(writeFileInjectable), - createKubectl: di.inject(createKubectlInjectable), - proxyKubeconfigManager: di.inject(kubeconfigManagerInjectable, cluster), - }, - cluster, - ), + instantiate: (di, cluster) => new ResourceApplier({ + deleteFile: di.inject(removePathInjectable), + emitAppEvent: di.inject(emitAppEventInjectable), + execFile: di.inject(execFileInjectable), + joinPaths: di.inject(joinPathsInjectable), + logger: di.inject(loggerInjectable), + writeFile: di.inject(writeFileInjectable), + kubectl: di.inject(createKubectlInjectable)(cluster.version.get()), + proxyKubeconfigManager: di.inject(kubeconfigManagerInjectable, cluster), + clusterEnvironment: di.inject(clusterEnvironmentInjectable, cluster), + }), lifecycle: lifecycleEnum.keyedSingleton({ getInstanceKey: (di, cluster: Cluster) => cluster.id, }), diff --git a/packages/core/src/main/resource-applier/resource-applier.ts b/packages/core/src/main/resource-applier/resource-applier.ts index f6da5dc4b7..244d6136c4 100644 --- a/packages/core/src/main/resource-applier/resource-applier.ts +++ b/packages/core/src/main/resource-applier/resource-applier.ts @@ -3,7 +3,6 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { Cluster } from "../../common/cluster/cluster"; import * as yaml from "js-yaml"; import tempy from "tempy"; import type { Patch } from "rfc6902"; @@ -14,11 +13,11 @@ import type { WriteFile } from "../../common/fs/write-file.injectable"; import type { RemovePath } from "../../common/fs/remove.injectable"; import type { ExecFile } from "../../common/fs/exec-file.injectable"; import type { JoinPaths } from "../../common/path/join-paths.injectable"; -import type { CreateKubectl } from "../kubectl/create-kubectl.injectable"; import type { KubeconfigManager } from "../kubeconfig-manager/kubeconfig-manager"; import type { AsyncResult } from "@k8slens/utilities"; import type { IComputedValue } from "mobx"; import type { ClusterEnvironment } from "../../common/cluster-env.injectable"; +import type { Kubectl } from "../kubectl/kubectl"; export interface ResourceApplierDependencies { emitAppEvent: EmitAppEvent; @@ -26,24 +25,19 @@ export interface ResourceApplierDependencies { deleteFile: RemovePath; execFile: ExecFile; joinPaths: JoinPaths; - createKubectl: CreateKubectl; + readonly kubectl: Kubectl; readonly proxyKubeconfigManager: KubeconfigManager; readonly logger: Logger; readonly clusterEnvironment: IComputedValue; } export class ResourceApplier { - constructor( - protected readonly dependencies: ResourceApplierDependencies, - protected readonly cluster: Cluster, - ) {} + constructor(protected readonly dependencies: ResourceApplierDependencies) {} private async getKubectlPath() { - const kubectl = this.dependencies.createKubectl(this.cluster.version.get()); + await this.dependencies.kubectl.ensureKubectl(); - await kubectl.ensureKubectl(); - - return kubectl.getPath(); + return this.dependencies.kubectl.getPath(); } /** diff --git a/packages/core/src/main/shell-session/local-shell-session/open.injectable.ts b/packages/core/src/main/shell-session/local-shell-session/open.injectable.ts index 4d5d54984a..5ec880f485 100644 --- a/packages/core/src/main/shell-session/local-shell-session/open.injectable.ts +++ b/packages/core/src/main/shell-session/local-shell-session/open.injectable.ts @@ -25,6 +25,7 @@ import buildVersionInjectable from "../../vars/build-version/build-version.injec import emitAppEventInjectable from "../../../common/app-event-bus/emit-event.injectable"; import statInjectable from "../../../common/fs/stat.injectable"; import kubeconfigManagerInjectable from "../../kubeconfig-manager/kubeconfig-manager.injectable"; +import clusterEnvironmentInjectable from "../../../common/cluster-env.injectable"; export interface OpenLocalShellSessionArgs { websocket: WebSocket; @@ -39,7 +40,7 @@ const openLocalShellSessionInjectable = getInjectable({ instantiate: (di): OpenLocalShellSession => { const createKubectl = di.inject(createKubectlInjectable); - const dependencies: Omit = { + const dependencies: Omit = { directoryForBinaries: di.inject(directoryForBinariesInjectable), isMac: di.inject(isMacInjectable), isWindows: di.inject(isWindowsInjectable), @@ -61,13 +62,12 @@ const openLocalShellSessionInjectable = getInjectable({ return async (args) => { const kubectl = createKubectl(args.cluster.version.get()); const kubeconfigManager = di.inject(kubeconfigManagerInjectable, args.cluster); - const proxyKubeconfigPath = await kubeconfigManager.ensurePath(); - const directoryContainingKubectl = await kubectl.binDir(); const session = new LocalShellSession({ ...dependencies, - proxyKubeconfigPath, - directoryContainingKubectl, + proxyKubeconfigPath: await kubeconfigManager.ensurePath(), + directoryContainingKubectl: await kubectl.binDir(), + clusterEnvironment: di.inject(clusterEnvironmentInjectable, args.cluster), }, { kubectl, ...args }); return session.open(); diff --git a/packages/core/src/main/shell-session/node-shell-session/open.injectable.ts b/packages/core/src/main/shell-session/node-shell-session/open.injectable.ts index 55ec26d362..e06cabfdb4 100644 --- a/packages/core/src/main/shell-session/node-shell-session/open.injectable.ts +++ b/packages/core/src/main/shell-session/node-shell-session/open.injectable.ts @@ -22,6 +22,7 @@ import statInjectable from "../../../common/fs/stat.injectable"; import createKubeApiInjectable from "../../../common/k8s-api/create-kube-api.injectable"; import loadProxyKubeconfigInjectable from "../../cluster/load-proxy-kubeconfig.injectable"; import kubeconfigManagerInjectable from "../../kubeconfig-manager/kubeconfig-manager.injectable"; +import clusterEnvironmentInjectable from "../../../common/cluster-env.injectable"; export interface NodeShellSessionArgs { websocket: WebSocket; @@ -36,7 +37,7 @@ const openNodeShellSessionInjectable = getInjectable({ id: "open-node-shell-session", instantiate: (di): OpenNodeShellSession => { const createKubectl = di.inject(createKubectlInjectable); - const dependencies: Omit = { + const dependencies: Omit = { isMac: di.inject(isMacInjectable), isWindows: di.inject(isWindowsInjectable), logger: di.inject(loggerInjectable), @@ -54,15 +55,13 @@ const openNodeShellSessionInjectable = getInjectable({ return async (args) => { const kubectl = createKubectl(args.cluster.version.get()); const kubeconfigManager = di.inject(kubeconfigManagerInjectable, args.cluster); - const loadProxyKubeconfig = di.inject(loadProxyKubeconfigInjectable, args.cluster); - const proxyKubeconfigPath = await kubeconfigManager.ensurePath(); - const directoryContainingKubectl = await kubectl.binDir(); const session = new NodeShellSession({ ...dependencies, - loadProxyKubeconfig, - proxyKubeconfigPath, - directoryContainingKubectl, + loadProxyKubeconfig: di.inject(loadProxyKubeconfigInjectable, args.cluster), + proxyKubeconfigPath: await kubeconfigManager.ensurePath(), + directoryContainingKubectl: await kubectl.binDir(), + clusterEnvironment: di.inject(clusterEnvironmentInjectable, args.cluster), }, { kubectl, ...args }); return session.open();