mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
* Consolidate downloading binaries into one script - Upgrade lens-k8s-proxy to 0.1.5 which allows us to remove the trailing slash in KubeAuthProxy - Consolidate nromalizing arch and os strings - Remove LensBinary as HelmCli is not just a raw object since it is always bundled - Introduce OnceCell and use it for the binary paths Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fully remove helmCli, move associated variable to vars Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix helm downloading on windows Signed-off-by: Sebastian Malton <sebastian@malton.name> * Don't download binaries for unsupported windows Signed-off-by: Sebastian Malton <sebastian@malton.name> * Arch specific paths Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix downloading helm on windows Signed-off-by: Sebastian Malton <sebastian@malton.name> * rename once-cell file to lazy-initialized Signed-off-by: Sebastian Malton <sebastian@malton.name>
60 lines
2.2 KiB
TypeScript
60 lines
2.2 KiB
TypeScript
/**
|
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
|
*/
|
|
|
|
import type WebSocket from "ws";
|
|
import path from "path";
|
|
import { UserStore } from "../../../common/user-store";
|
|
import type { Cluster } from "../../../common/cluster/cluster";
|
|
import type { ClusterId } from "../../../common/cluster-types";
|
|
import { ShellSession } from "../shell-session";
|
|
import type { Kubectl } from "../../kubectl/kubectl";
|
|
import { baseBinariesDir } from "../../../common/vars";
|
|
|
|
export class LocalShellSession extends ShellSession {
|
|
ShellType = "shell";
|
|
|
|
constructor(protected shellEnvModify: (clusterId: ClusterId, env: Record<string, string>) => Record<string, string>, kubectl: Kubectl, websocket: WebSocket, cluster: Cluster, terminalId: string) {
|
|
super(kubectl, websocket, cluster, terminalId);
|
|
}
|
|
|
|
protected getPathEntries(): string[] {
|
|
return [baseBinariesDir.get()];
|
|
}
|
|
|
|
protected get cwd(): string | undefined {
|
|
return this.cluster.preferences?.terminalCWD;
|
|
}
|
|
|
|
public async open() {
|
|
let env = await this.getCachedShellEnv();
|
|
|
|
// extensions can modify the env
|
|
env = this.shellEnvModify(this.cluster.id, env);
|
|
|
|
const shell = env.PTYSHELL;
|
|
const args = await this.getShellArgs(shell);
|
|
|
|
await this.openShellProcess(env.PTYSHELL, args, env);
|
|
}
|
|
|
|
protected async getShellArgs(shell: string): Promise<string[]> {
|
|
const pathFromPreferences = UserStore.getInstance().kubectlBinariesPath || this.kubectl.getBundledPath();
|
|
const kubectlPathDir = UserStore.getInstance().downloadKubectlBinaries ? await this.kubectlBinDirP : path.dirname(pathFromPreferences);
|
|
|
|
switch(path.basename(shell)) {
|
|
case "powershell.exe":
|
|
return ["-NoExit", "-command", `& {$Env:PATH="${baseBinariesDir.get()};${kubectlPathDir};$Env:PATH"}`];
|
|
case "bash":
|
|
return ["--init-file", path.join(await this.kubectlBinDirP, ".bash_set_path")];
|
|
case "fish":
|
|
return ["--login", "--init-command", `export PATH="${baseBinariesDir.get()}:${kubectlPathDir}:$PATH"; export KUBECONFIG="${await this.kubeconfigPathP}"`];
|
|
case "zsh":
|
|
return ["--login"];
|
|
default:
|
|
return [];
|
|
}
|
|
}
|
|
}
|