diff --git a/src/common/k8s-api/create-kube-json-api-for-cluster.injectable.ts b/src/common/k8s-api/create-kube-json-api-for-cluster.injectable.ts index 92f3ca88c3..799b0bf963 100644 --- a/src/common/k8s-api/create-kube-json-api-for-cluster.injectable.ts +++ b/src/common/k8s-api/create-kube-json-api-for-cluster.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import { apiKubePrefix } from "../vars"; import isDebuggingInjectable from "../vars/is-debugging.injectable"; -import apiBaseInjectable from "./api-base.injectable"; +import { apiBaseHostHeaderInjectionToken, apiBaseServerAddressInjectionToken } from "./api-base-configs"; import createKubeJsonApiInjectable from "./create-kube-json-api.injectable"; import type { KubeJsonApi } from "./kube-json-api"; @@ -14,19 +14,18 @@ export type CreateKubeJsonApiForCluster = (clusterId: string) => KubeJsonApi; const createKubeJsonApiForClusterInjectable = getInjectable({ id: "create-kube-json-api-for-cluster", instantiate: (di): CreateKubeJsonApiForCluster => { - const apiBase = di.inject(apiBaseInjectable); const createKubeJsonApi = di.inject(createKubeJsonApiInjectable); const isDebugging = di.inject(isDebuggingInjectable); return (clusterId) => createKubeJsonApi( { - serverAddress: apiBase.config.serverAddress, + serverAddress: di.inject(apiBaseServerAddressInjectionToken), apiBase: apiKubePrefix, debug: isDebugging, }, { headers: { - "Host": `${clusterId}.localhost:${new URL(apiBase.config.serverAddress).port}`, + "Host": `${clusterId}.${di.inject(apiBaseHostHeaderInjectionToken)}`, }, }, ); diff --git a/src/main/shell-session/create-shell-session.injectable.ts b/src/main/shell-session/create-shell-session.injectable.ts index 49ba44cb67..6af65dc908 100644 --- a/src/main/shell-session/create-shell-session.injectable.ts +++ b/src/main/shell-session/create-shell-session.injectable.ts @@ -22,10 +22,11 @@ const openShellSessionInjectable = getInjectable({ instantiate: (di): OpenShellSession => { const openLocalShellSession = di.inject(openLocalShellSessionInjectable); + const openNodeShellSession = di.inject(openNodeShellSessionInjectable); return ({ nodeName, ...args }) => ( nodeName - ? di.inject(openNodeShellSessionInjectable, { nodeName, ...args }) + ? openNodeShellSession({ nodeName, ...args }) : openLocalShellSession(args) ); }, diff --git a/src/main/shell-session/node-shell-session/open.injectable.ts b/src/main/shell-session/node-shell-session/open.injectable.ts index 739bd7497c..47b97994b7 100644 --- a/src/main/shell-session/node-shell-session/open.injectable.ts +++ b/src/main/shell-session/node-shell-session/open.injectable.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getInjectable, lifecycleEnum } from "@ogre-tools/injectable"; +import { getInjectable } from "@ogre-tools/injectable"; import type { Cluster } from "../../../common/cluster/cluster"; import type WebSocket from "ws"; import createKubectlInjectable from "../../kubectl/create-kubectl.injectable"; @@ -27,9 +27,11 @@ export interface NodeShellSessionArgs { nodeName: string; } +export type OpenNodeShellSession = (args: NodeShellSessionArgs) => Promise; + const openNodeShellSessionInjectable = getInjectable({ id: "open-node-shell-session", - instantiate: (di, params: NodeShellSessionArgs) => { + instantiate: (di): OpenNodeShellSession => { const createKubectl = di.inject(createKubectlInjectable); const dependencies: NodeShellSessionDependencies = { isMac: di.inject(isMacInjectable), @@ -44,13 +46,14 @@ const openNodeShellSessionInjectable = getInjectable({ emitAppEvent: di.inject(emitAppEventInjectable), stat: di.inject(statInjectable), }; - const kubectl = createKubectl(params.cluster.version); - const session = new NodeShellSession(dependencies, { kubectl, ...params }); - return session.open(); + return async (args) => { + const kubectl = createKubectl(args.cluster.version); + const session = new NodeShellSession(dependencies, { kubectl, ...args }); + + return session.open(); + }; }, - // NOTE: this must be transient to bypass the circular dependency of `createKubeJsonApiForClusterInjectable` on the lens proxy port - lifecycle: lifecycleEnum.transient, }); export default openNodeShellSessionInjectable;