import fs from "node:fs"; import path from "node:path"; import yaml from "js-yaml"; const loadYaml = (f) => yaml.load(fs.readFileSync(path.resolve(f), "utf8")); export function getFtpContainer(serverSpec) { const { mclName } = serverSpec; const ftpContainer = loadYaml("lib/k8s/configs/containers/ftp-server.yml"); ftpContainer.name = `mcl-${mclName}-ftp`; const ftpPortList = [ { p: 20, n: "ftp-data" }, { p: 21, n: "ftp-commands" }, ]; for (var p = 40000; p <= 40009; p++) ftpPortList.push({ p, n: `ftp-passive-${p - 40000}` }); ftpContainer.ports = ftpPortList.map(({ p: containerPort, n: name }) => ({ containerPort, name, protocol: "TCP", })); return ftpContainer; } export function getCoreServerContainer(serverSpec) { const { mclName, version, serverType, memory } = serverSpec; const container = loadYaml("lib/k8s/configs/containers/minecraft-server.yml"); // Container Updates container.name = `mcl-${mclName}-server`; container.resources.requests.memory = `${memory}Mi`; const findEnv = (k) => container.env.find(({ name: n }) => n === k); const updateEnv = (k, v) => (findEnv(k).value = v); // Enviornment variables updateEnv("TYPE", serverType); updateEnv("VERSION", version); updateEnv("MEMORY", `${memory}M`); // RCON const rs = `mcl-${mclName}-rcon-secret`; findEnv("RCON_PASSWORD").valueFrom.secretKeyRef.name = rs; return container; } export function getServerContainer(serverSpec) { const { difficulty, gamemode, motd, maxPlayers, seed, ops, whitelist } = serverSpec; const container = getCoreServerContainer(serverSpec); const findEnv = (k) => container.env.find(({ name: n }) => n === k); const updateEnv = (k, v) => (findEnv(k).value = v); // Enviornment variables /*updateEnv("DIFFICULTY", difficulty); updateEnv("MODE", gamemode); updateEnv("MOTD", motd); updateEnv("MAX_PLAYERS", maxPlayers); updateEnv("SEED", seed); updateEnv("OPS", ops); updateEnv("WHITELIST", whitelist); */ return container; } export function getBackupContainer(serverSpec) { const container = loadYaml("lib/k8s/configs/containers/minecraft-backup.yml"); return container; }