diff --git a/src/common/cluster/cluster.ts b/src/common/cluster/cluster.ts index 11b67bd002..dafc6b3e8c 100644 --- a/src/common/cluster/cluster.ts +++ b/src/common/cluster/cluster.ts @@ -10,7 +10,7 @@ import type { KubeConfig } from "@kubernetes/client-node"; import { HttpError } from "@kubernetes/client-node"; import type { Kubectl } from "../../main/kubectl/kubectl"; import type { KubeconfigManager } from "../../main/kubeconfig-manager/kubeconfig-manager"; -import { loadConfigFromFile } from "../kube-helpers"; +import { loadConfigFromString } from "../kube-helpers"; import type { KubeApiResource, KubeResource } from "../rbac"; import { apiResourceRecord, apiResources } from "../rbac"; import type { VersionDetector } from "../../main/cluster-detectors/version-detector"; @@ -25,6 +25,7 @@ import type { CanI } from "./authorization-review.injectable"; import type { ListNamespaces } from "./list-namespaces.injectable"; import assert from "assert"; import type { Logger } from "../logger"; +import type { ReadFile } from "../fs/read-file.injectable"; export interface ClusterDependencies { readonly directoryForKubeConfigs: string; @@ -36,6 +37,7 @@ export interface ClusterDependencies { createAuthorizationReview: (config: KubeConfig) => CanI; createListNamespaces: (config: KubeConfig) => ListNamespaces; createVersionDetector: (cluster: Cluster) => VersionDetector; + readFile: ReadFile; } /** @@ -486,7 +488,8 @@ export class Cluster implements ClusterModel, ClusterState { } async getKubeconfig(): Promise { - const { config } = await loadConfigFromFile(this.kubeConfigPath); + const configData = await this.dependencies.readFile(this.kubeConfigPath); + const { config } = loadConfigFromString(configData); return config; } @@ -496,7 +499,8 @@ export class Cluster implements ClusterModel, ClusterState { */ async getProxyKubeconfig(): Promise { const proxyKCPath = await this.getProxyKubeconfigPath(); - const { config } = await loadConfigFromFile(proxyKCPath); + const configData = await this.dependencies.readFile(proxyKCPath); + const { config } = loadConfigFromString(configData); return config; } diff --git a/src/common/fs/read-file.injectable.ts b/src/common/fs/read-file.injectable.ts index b0a2b7233e..0dc539e1b1 100644 --- a/src/common/fs/read-file.injectable.ts +++ b/src/common/fs/read-file.injectable.ts @@ -5,11 +5,16 @@ import { getInjectable } from "@ogre-tools/injectable"; import fsInjectable from "./fs.injectable"; +export type ReadFile = (filePath: string) => Promise; + const readFileInjectable = getInjectable({ id: "read-file", - instantiate: (di) => (filePath: string) => - di.inject(fsInjectable).readFile(filePath, "utf-8"), + instantiate: (di): ReadFile => { + const { readFile } = di.inject(fsInjectable); + + return (filePath) => readFile(filePath, "utf-8"); + }, }); export default readFileInjectable; diff --git a/src/common/kube-helpers.ts b/src/common/kube-helpers.ts index 3a90bc79ff..4541e8cc31 100644 --- a/src/common/kube-helpers.ts +++ b/src/common/kube-helpers.ts @@ -4,25 +4,18 @@ */ import { KubeConfig } from "@kubernetes/client-node"; -import fse from "fs-extra"; import path from "path"; import os from "os"; import yaml from "js-yaml"; import logger from "../main/logger"; import type { Cluster, Context, User } from "@kubernetes/client-node/dist/config_types"; import { newClusters, newContexts, newUsers } from "@kubernetes/client-node/dist/config_types"; -import { isDefined, resolvePath } from "./utils"; +import { isDefined } from "./utils"; import Joi from "joi"; import type { PartialDeep } from "type-fest"; export const kubeConfigDefaultPath = path.join(os.homedir(), ".kube", "config"); -export async function loadConfigFromFile(filePath: string): Promise { - const content = await fse.readFile(resolvePath(filePath), "utf-8"); - - return loadConfigFromString(content); -} - const clusterSchema = Joi.object({ name: Joi .string()