* chore(deps): update dependency eslint to v9 * chore: migrate eslint to v9 * fix: dependency issues * fix: unit tests not working * chore: disable lint check for Image component that does not work in ci * fix: lint issue --------- Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com> Co-authored-by: Meier Lukas <meierschlumpf@gmail.com>
52 lines
1.4 KiB
TypeScript
52 lines
1.4 KiB
TypeScript
import Docker from "dockerode";
|
|
|
|
interface DockerInstance {
|
|
host: string;
|
|
instance: Docker;
|
|
}
|
|
|
|
export class DockerSingleton {
|
|
private static instances: DockerInstance[];
|
|
|
|
private createInstances() {
|
|
const instances: DockerInstance[] = [];
|
|
const hostVariable = process.env.DOCKER_HOST;
|
|
const portVariable = process.env.DOCKER_PORT;
|
|
if (hostVariable === undefined || portVariable === undefined) {
|
|
instances.push({ host: "socket", instance: new Docker() });
|
|
return instances;
|
|
}
|
|
const hosts = hostVariable.split(",");
|
|
const ports = portVariable.split(",");
|
|
|
|
if (hosts.length !== ports.length) {
|
|
throw new Error("The number of hosts and ports must match");
|
|
}
|
|
|
|
hosts.forEach((host, i) => {
|
|
instances.push({
|
|
host: `${host}:${ports[i]}`,
|
|
instance: new Docker({
|
|
host,
|
|
port: parseInt(ports[i] ?? "", 10),
|
|
}),
|
|
});
|
|
return instances;
|
|
});
|
|
return instances;
|
|
}
|
|
|
|
public static findInstance(key: string): DockerInstance | undefined {
|
|
return this.instances.find((instance) => instance.host === key);
|
|
}
|
|
|
|
public static getInstance(): DockerInstance[] {
|
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
if (!DockerSingleton.instances) {
|
|
DockerSingleton.instances = new DockerSingleton().createInstances();
|
|
}
|
|
|
|
return this.instances;
|
|
}
|
|
}
|