mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
refactored to remove ShellEnvModifier code from shell-session to local-shell-session
Signed-off-by: Jim Ehrismann <jehrismann@mirantis.com>
This commit is contained in:
parent
22a32adc49
commit
fd66fb0170
@ -24,7 +24,7 @@ const localShellSessionInjectable = getInjectable({
|
|||||||
const kubectl = createKubectl(cluster.version);
|
const kubectl = createKubectl(cluster.version);
|
||||||
const entity = catalogEntityRegistry.getById(cluster.id);
|
const entity = catalogEntityRegistry.getById(cluster.id);
|
||||||
|
|
||||||
return new LocalShellSession(kubectl, localShellEnvModifiers.get(), entity, webSocket, cluster, tabId);
|
return new LocalShellSession(localShellEnvModifiers.get(), entity, kubectl, webSocket, cluster, tabId);
|
||||||
},
|
},
|
||||||
|
|
||||||
lifecycle: lifecycleEnum.transient,
|
lifecycle: lifecycleEnum.transient,
|
||||||
|
|||||||
@ -3,14 +3,23 @@
|
|||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import type WebSocket from "ws";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import { helmCli } from "../../helm/helm-cli";
|
import { helmCli } from "../../helm/helm-cli";
|
||||||
import { UserStore } from "../../../common/user-store";
|
import { UserStore } from "../../../common/user-store";
|
||||||
|
import type { Cluster } from "../../../common/cluster/cluster";
|
||||||
import { ShellSession } from "../shell-session";
|
import { ShellSession } from "../shell-session";
|
||||||
|
import type { Kubectl } from "../../kubectl/kubectl";
|
||||||
|
import type { ShellEnvModifier } from "../shell-env-modifier/shell-env-modifier-registration";
|
||||||
|
import type { CatalogEntity } from "../../../common/catalog";
|
||||||
|
|
||||||
export class LocalShellSession extends ShellSession {
|
export class LocalShellSession extends ShellSession {
|
||||||
ShellType = "shell";
|
ShellType = "shell";
|
||||||
|
|
||||||
|
constructor(protected shellEnvModifiers: ShellEnvModifier[], protected entity: CatalogEntity, kubectl: Kubectl, websocket: WebSocket, cluster: Cluster, terminalId: string) {
|
||||||
|
super(kubectl, websocket, cluster, terminalId);
|
||||||
|
}
|
||||||
|
|
||||||
protected getPathEntries(): string[] {
|
protected getPathEntries(): string[] {
|
||||||
return [helmCli.getBinaryDir()];
|
return [helmCli.getBinaryDir()];
|
||||||
}
|
}
|
||||||
@ -20,7 +29,14 @@ export class LocalShellSession extends ShellSession {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public async open() {
|
public async open() {
|
||||||
const env = await this.getCachedShellEnv();
|
let env = await this.getCachedShellEnv();
|
||||||
|
|
||||||
|
if (this.entity) {
|
||||||
|
const ctx = { catalogEntity: this.entity };
|
||||||
|
|
||||||
|
env = JSON.parse(JSON.stringify(this.shellEnvModifiers.reduce((env, modifier) => modifier(ctx, env), env)));
|
||||||
|
}
|
||||||
|
|
||||||
const shell = env.PTYSHELL;
|
const shell = env.PTYSHELL;
|
||||||
const args = await this.getShellArgs(shell);
|
const args = await this.getShellArgs(shell);
|
||||||
|
|
||||||
|
|||||||
@ -25,7 +25,7 @@ export class NodeShellSession extends ShellSession {
|
|||||||
protected readonly cwd: string | undefined = undefined;
|
protected readonly cwd: string | undefined = undefined;
|
||||||
|
|
||||||
constructor(protected nodeName: string, kubectl: Kubectl, socket: WebSocket, cluster: Cluster, terminalId: string) {
|
constructor(protected nodeName: string, kubectl: Kubectl, socket: WebSocket, cluster: Cluster, terminalId: string) {
|
||||||
super(kubectl, [], undefined, socket, cluster, terminalId);
|
super(kubectl, socket, cluster, terminalId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async open() {
|
public async open() {
|
||||||
|
|||||||
@ -19,8 +19,6 @@ import logger from "../logger";
|
|||||||
import { TerminalChannels, TerminalMessage } from "../../renderer/api/terminal-api";
|
import { TerminalChannels, TerminalMessage } from "../../renderer/api/terminal-api";
|
||||||
import { deserialize, serialize } from "v8";
|
import { deserialize, serialize } from "v8";
|
||||||
import { stat } from "fs/promises";
|
import { stat } from "fs/promises";
|
||||||
import type { ShellEnvModifier } from "./shell-env-modifier/shell-env-modifier-registration";
|
|
||||||
import type { CatalogEntity } from "../../common/catalog";
|
|
||||||
|
|
||||||
export class ShellOpenError extends Error {
|
export class ShellOpenError extends Error {
|
||||||
constructor(message: string, public cause: Error) {
|
constructor(message: string, public cause: Error) {
|
||||||
@ -106,12 +104,10 @@ export enum WebSocketCloseEvent {
|
|||||||
TlsHandshake = 1015,
|
TlsHandshake = 1015,
|
||||||
}
|
}
|
||||||
|
|
||||||
type ShellEnvId = { clusterId: string, ShellType: string };
|
|
||||||
|
|
||||||
export abstract class ShellSession {
|
export abstract class ShellSession {
|
||||||
abstract ShellType: string;
|
abstract ShellType: string;
|
||||||
|
|
||||||
private static shellEnvs = new Map<ShellEnvId, Record<string, string>>();
|
private static shellEnvs = new Map<string, Record<string, string>>();
|
||||||
private static processes = new Map<string, pty.IPty>();
|
private static processes = new Map<string, pty.IPty>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -159,7 +155,7 @@ export abstract class ShellSession {
|
|||||||
return { shellProcess, resume };
|
return { shellProcess, resume };
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(protected kubectl: Kubectl, protected shellEnvModifiers: ShellEnvModifier[], protected entity: CatalogEntity, protected websocket: WebSocket, protected cluster: Cluster, terminalId: string) {
|
constructor(protected kubectl: Kubectl, protected websocket: WebSocket, protected cluster: Cluster, terminalId: string) {
|
||||||
this.kubeconfigPathP = this.cluster.getProxyKubeconfigPath();
|
this.kubeconfigPathP = this.cluster.getProxyKubeconfigPath();
|
||||||
this.kubectlBinDirP = this.kubectl.binDir();
|
this.kubectlBinDirP = this.kubectl.binDir();
|
||||||
this.terminalId = `${cluster.id}:${terminalId}`;
|
this.terminalId = `${cluster.id}:${terminalId}`;
|
||||||
@ -298,17 +294,16 @@ export abstract class ShellSession {
|
|||||||
|
|
||||||
protected async getCachedShellEnv() {
|
protected async getCachedShellEnv() {
|
||||||
const { id: clusterId } = this.cluster;
|
const { id: clusterId } = this.cluster;
|
||||||
const { ShellType } = this;
|
|
||||||
|
|
||||||
let env = ShellSession.shellEnvs.get({ clusterId, ShellType });
|
let env = ShellSession.shellEnvs.get(clusterId);
|
||||||
|
|
||||||
if (!env) {
|
if (!env) {
|
||||||
env = await this.getShellEnv();
|
env = await this.getShellEnv();
|
||||||
ShellSession.shellEnvs.set({ clusterId, ShellType }, env);
|
ShellSession.shellEnvs.set(clusterId, env);
|
||||||
} else {
|
} else {
|
||||||
// refresh env in the background
|
// refresh env in the background
|
||||||
this.getShellEnv().then((shellEnv: any) => {
|
this.getShellEnv().then((shellEnv: any) => {
|
||||||
ShellSession.shellEnvs.set({ clusterId, ShellType }, shellEnv);
|
ShellSession.shellEnvs.set(clusterId, shellEnv);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -363,13 +358,6 @@ export abstract class ShellSession {
|
|||||||
.filter(Boolean)
|
.filter(Boolean)
|
||||||
.join();
|
.join();
|
||||||
|
|
||||||
if (this.entity) {
|
|
||||||
const ctx = { catalogEntity: this.entity };
|
|
||||||
const modifiedEnv = this.shellEnvModifiers.reduce((env, modifier) => modifier(ctx, env), env);
|
|
||||||
|
|
||||||
return modifiedEnv;
|
|
||||||
}
|
|
||||||
|
|
||||||
return env;
|
return env;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user