mirror of
https://github.com/gethomepage/homepage.git
synced 2026-04-27 11:29:47 -04:00
Lazy-load Docker and Kubernetes deps
This commit is contained in:
parent
d529f81cb4
commit
4f3d60b94d
@ -1,14 +1,11 @@
|
||||
import { promises as fs } from "fs";
|
||||
import path from "path";
|
||||
|
||||
import Docker from "dockerode";
|
||||
import yaml from "js-yaml";
|
||||
|
||||
import checkAndCopyConfig, { CONF_DIR, getSettings, substituteEnvironmentVars } from "utils/config/config";
|
||||
import getDockerArguments from "utils/config/docker";
|
||||
import { getKubeConfig } from "utils/config/kubernetes";
|
||||
import * as shvl from "utils/config/shvl";
|
||||
import kubernetes from "utils/kubernetes/export";
|
||||
import createLogger from "utils/logger";
|
||||
|
||||
const logger = createLogger("service-helpers");
|
||||
@ -71,6 +68,8 @@ export async function servicesFromDocker() {
|
||||
return [];
|
||||
}
|
||||
|
||||
const { default: Docker } = await import("dockerode");
|
||||
|
||||
const { instanceName } = getSettings();
|
||||
|
||||
const serviceServers = await Promise.all(
|
||||
@ -173,6 +172,19 @@ export async function servicesFromKubernetes() {
|
||||
|
||||
checkAndCopyConfig("kubernetes.yaml");
|
||||
|
||||
const k8sConfigFile = path.join(CONF_DIR, "kubernetes.yaml");
|
||||
const k8sRawConfigData = await fs.readFile(k8sConfigFile, "utf8");
|
||||
const k8sConfigData = substituteEnvironmentVars(k8sRawConfigData);
|
||||
const k8sConfig = yaml.load(k8sConfigData);
|
||||
if (!k8sConfig?.mode || k8sConfig.mode === "disabled") {
|
||||
return [];
|
||||
}
|
||||
|
||||
const [{ getKubeConfig }, { default: kubernetes }] = await Promise.all([
|
||||
import("utils/config/kubernetes"),
|
||||
import("utils/kubernetes/export"),
|
||||
]);
|
||||
|
||||
try {
|
||||
const kc = getKubeConfig();
|
||||
if (!kc) {
|
||||
|
||||
@ -4,6 +4,7 @@ const { state, fs, yaml, config, Docker, dockerCfg, kubeCfg, kubeApi } = vi.hois
|
||||
const state = {
|
||||
servicesYaml: null,
|
||||
dockerYaml: null,
|
||||
kubernetesYaml: null,
|
||||
dockerContainers: [],
|
||||
dockerContainersByServer: {},
|
||||
dockerServicesByServer: {},
|
||||
@ -21,6 +22,7 @@ const { state, fs, yaml, config, Docker, dockerCfg, kubeCfg, kubeApi } = vi.hois
|
||||
readFile: vi.fn(async (filePath) => {
|
||||
if (String(filePath).endsWith("/services.yaml")) return "services";
|
||||
if (String(filePath).endsWith("/docker.yaml")) return "docker";
|
||||
if (String(filePath).endsWith("/kubernetes.yaml")) return "kubernetes";
|
||||
return "";
|
||||
}),
|
||||
};
|
||||
@ -29,6 +31,7 @@ const { state, fs, yaml, config, Docker, dockerCfg, kubeCfg, kubeApi } = vi.hois
|
||||
load: vi.fn((contents) => {
|
||||
if (contents === "services") return state.servicesYaml;
|
||||
if (contents === "docker") return state.dockerYaml;
|
||||
if (contents === "kubernetes") return state.kubernetesYaml;
|
||||
return null;
|
||||
}),
|
||||
};
|
||||
@ -89,6 +92,7 @@ describe("utils/config/service-helpers", () => {
|
||||
vi.clearAllMocks();
|
||||
state.servicesYaml = null;
|
||||
state.dockerYaml = null;
|
||||
state.kubernetesYaml = null;
|
||||
state.dockerContainers = [];
|
||||
state.dockerContainersByServer = {};
|
||||
state.dockerServicesByServer = {};
|
||||
@ -423,6 +427,7 @@ describe("utils/config/service-helpers", () => {
|
||||
state.servicesYaml = [{ G: [{ Other: { icon: "nope" } }] }];
|
||||
state.dockerYaml = { "docker-local": {} };
|
||||
state.dockerContainers = [];
|
||||
state.kubernetesYaml = { mode: "default" };
|
||||
state.kubeConfig = {}; // truthy => proceed
|
||||
state.kubeServices = [{ name: "S", group: "G", type: "service" }];
|
||||
kubeApi.listIngress.mockResolvedValueOnce([{}]);
|
||||
@ -574,6 +579,7 @@ describe("utils/config/service-helpers", () => {
|
||||
|
||||
it("servicesFromKubernetes maps discoverable resources into service groups", async () => {
|
||||
config.getSettings.mockReturnValue({ instanceName: "foo" });
|
||||
state.kubernetesYaml = { mode: "default" };
|
||||
state.kubeConfig = {}; // truthy
|
||||
kubeApi.listIngress.mockResolvedValueOnce([{ kind: "Ingress" }]);
|
||||
kubeApi.isDiscoverable.mockReturnValueOnce(true);
|
||||
@ -592,6 +598,7 @@ describe("utils/config/service-helpers", () => {
|
||||
});
|
||||
|
||||
it("servicesFromKubernetes logs and rethrows unexpected errors", async () => {
|
||||
state.kubernetesYaml = { mode: "default" };
|
||||
state.kubeConfig = {}; // truthy
|
||||
kubeApi.listIngress.mockRejectedValueOnce(new Error("boom"));
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user