diff --git a/src/extensions/lens-main-extension.ts b/src/extensions/lens-main-extension.ts index 3ff0da5192..6d720752e6 100644 --- a/src/extensions/lens-main-extension.ts +++ b/src/extensions/lens-main-extension.ts @@ -16,7 +16,7 @@ export class LensMainExtension extends LensExtension { appMenus: MenuRegistration[] = []; trayMenus: TrayMenuRegistration[] = []; - shellEnvModifier?: ShellEnvModifier; + terminalShellEnvModifier?: ShellEnvModifier; async navigate(pageId?: string, params?: Record, frameId?: number) { return WindowManager.getInstance().navigateExtension(this.id, pageId, params, frameId); diff --git a/src/main/shell-session/local-shell-session/local-shell-session.injectable.ts b/src/main/shell-session/local-shell-session/local-shell-session.injectable.ts index 352fa53a64..9b1d897865 100644 --- a/src/main/shell-session/local-shell-session/local-shell-session.injectable.ts +++ b/src/main/shell-session/local-shell-session/local-shell-session.injectable.ts @@ -7,7 +7,7 @@ import { LocalShellSession } from "./local-shell-session"; import type { Cluster } from "../../../common/cluster/cluster"; import type WebSocket from "ws"; import createKubectlInjectable from "../../kubectl/create-kubectl.injectable"; -import shellEnvModifiersInjectable from "../shell-env-modifier/shell-env-modifier.injectable"; +import terminalShellEnvModifiersInjectable from "../shell-env-modifier/terminal-shell-env-modifier.injectable"; import { catalogEntityRegistry } from "../../catalog"; interface InstantiationParameter { @@ -19,12 +19,12 @@ interface InstantiationParameter { const localShellSessionInjectable = getInjectable({ instantiate: (di, { cluster, tabId, webSocket }: InstantiationParameter) => { const createKubectl = di.inject(createKubectlInjectable); - const shellEnvModifiers = di.inject(shellEnvModifiersInjectable); + const localShellEnvModifiers = di.inject(terminalShellEnvModifiersInjectable); const kubectl = createKubectl(cluster.version); const entity = catalogEntityRegistry.getById(cluster.id); - return new LocalShellSession(kubectl, shellEnvModifiers.get(), entity, webSocket, cluster, tabId); + return new LocalShellSession(kubectl, localShellEnvModifiers.get(), entity, webSocket, cluster, tabId); }, lifecycle: lifecycleEnum.transient, diff --git a/src/main/shell-session/shell-env-modifier/shell-env-modifier.injectable.ts b/src/main/shell-session/shell-env-modifier/terminal-shell-env-modifier.injectable.ts similarity index 66% rename from src/main/shell-session/shell-env-modifier/shell-env-modifier.injectable.ts rename to src/main/shell-session/shell-env-modifier/terminal-shell-env-modifier.injectable.ts index d8b699a97e..cba4d3ad06 100644 --- a/src/main/shell-session/shell-env-modifier/shell-env-modifier.injectable.ts +++ b/src/main/shell-session/shell-env-modifier/terminal-shell-env-modifier.injectable.ts @@ -5,15 +5,15 @@ import { getInjectable, lifecycleEnum } from "@ogre-tools/injectable"; import mainExtensionsInjectable from "../../../extensions/main-extensions.injectable"; -import { shellEnvModifiers } from "./shell-env-modifiers"; +import { terminalShellEnvModifiers } from "./terminal-shell-env-modifiers"; -const shellEnvModifiersInjectable = getInjectable({ +const terminalShellEnvModifiersInjectable = getInjectable({ instantiate: (di) => - shellEnvModifiers({ + terminalShellEnvModifiers({ extensions: di.inject(mainExtensionsInjectable), }), lifecycle: lifecycleEnum.singleton, }); -export default shellEnvModifiersInjectable; +export default terminalShellEnvModifiersInjectable; diff --git a/src/main/shell-session/shell-env-modifier/shell-env-modifiers.ts b/src/main/shell-session/shell-env-modifier/terminal-shell-env-modifiers.ts similarity index 75% rename from src/main/shell-session/shell-env-modifier/shell-env-modifiers.ts rename to src/main/shell-session/shell-env-modifier/terminal-shell-env-modifiers.ts index d29a5ccf5a..1d0e0bf1a3 100644 --- a/src/main/shell-session/shell-env-modifier/shell-env-modifiers.ts +++ b/src/main/shell-session/shell-env-modifier/terminal-shell-env-modifiers.ts @@ -10,10 +10,10 @@ interface Dependencies { extensions: IComputedValue; } -export const shellEnvModifiers = ({ extensions }: Dependencies) => { +export const terminalShellEnvModifiers = ({ extensions }: Dependencies) => { return computed(() => ( extensions.get() - .map((extension) => extension.shellEnvModifier) + .map((extension) => extension.terminalShellEnvModifier) .filter(Boolean) )); }; diff --git a/src/main/shell-session/shell-session.ts b/src/main/shell-session/shell-session.ts index 2fb30d5071..f81d69cd42 100644 --- a/src/main/shell-session/shell-session.ts +++ b/src/main/shell-session/shell-session.ts @@ -106,10 +106,12 @@ export enum WebSocketCloseEvent { TlsHandshake = 1015, } +type ShellEnvId = { clusterId: string, ShellType: string }; + export abstract class ShellSession { abstract ShellType: string; - private static shellEnvs = new Map>(); + private static shellEnvs = new Map>(); private static processes = new Map(); /** @@ -296,16 +298,17 @@ export abstract class ShellSession { protected async getCachedShellEnv() { const { id: clusterId } = this.cluster; + const { ShellType } = this; - let env = ShellSession.shellEnvs.get(clusterId); + let env = ShellSession.shellEnvs.get({ clusterId, ShellType }); if (!env) { env = await this.getShellEnv(); - ShellSession.shellEnvs.set(clusterId, env); + ShellSession.shellEnvs.set({ clusterId, ShellType }, env); } else { // refresh env in the background this.getShellEnv().then((shellEnv: any) => { - ShellSession.shellEnvs.set(clusterId, shellEnv); + ShellSession.shellEnvs.set({ clusterId, ShellType }, shellEnv); }); } @@ -343,10 +346,8 @@ export abstract class ShellSession { env.DISABLE_AUTO_UPDATE = "true"; } - const kubeconfigPath = await this.kubeconfigPathP; - env.PTYPID = process.pid.toString(); - env.KUBECONFIG = kubeconfigPath; + env.KUBECONFIG = await this.kubeconfigPathP; env.TERM_PROGRAM = app.getName(); env.TERM_PROGRAM_VERSION = app.getVersion(); @@ -362,15 +363,14 @@ export abstract class ShellSession { .filter(Boolean) .join(); - console.log("entity in shell-session", this.entity); - console.log(this.entity.spec.kubeconfigPath); - console.log(this.entity.spec.kubeconfigContext); - console.log(this.entity.getId()); + if (this.entity) { + const ctx = { catalogEntity: this.entity }; + const modifiedEnv = this.shellEnvModifiers.reduce((env, modifier) => modifier(ctx, env), env); - const ctx = { catalogEntity: this.entity }; - const modifiedEnv = this.shellEnvModifiers.reduce((env, modifier) => modifier(ctx, env), env); + return modifiedEnv; + } - return modifiedEnv; + return env; } protected exit(code = WebSocketCloseEvent.NormalClosure) {