Files
kuber/lib/arch.ts
T
2026-08-28 21:19:50 +07:00

37 lines
967 B
TypeScript

import { AsyncLocalStorage } from "node:async_hooks";
import type { ComposeSpecification } from "../schema/docker.d";
export type ComposeArch = "amd64" | "arm64";
const composeArch = new AsyncLocalStorage<ComposeArch>();
export function resolveComposeArch(compose: ComposeSpecification): ComposeArch {
return compose["x-arch"] === "amd64" ? "amd64" : "arm64";
}
export function withComposeArch<T>(compose: ComposeSpecification, fn: () => T): T {
return composeArch.run(resolveComposeArch(compose), fn);
}
export function getComposeArch(): ComposeArch {
return composeArch.getStore() ?? "arm64";
}
export function getComposeArchPlacement(compose: ComposeSpecification) {
if (resolveComposeArch(compose) !== "amd64") return {};
return {
nodeSelector: {
"kubernetes.io/arch": "amd64",
},
tolerations: [
{
key: "arch",
operator: "Equal",
value: "amd64",
effect: "NoExecute",
},
],
};
}