2023-12-20 03:20:04 +00:00
|
|
|
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) {
|
2024-01-15 20:30:31 +00:00
|
|
|
const { mclName } = serverSpec;
|
2023-12-20 03:20:04 +00:00
|
|
|
const ftpContainer = loadYaml("lib/k8s/configs/containers/ftp-server.yml");
|
2024-01-15 20:30:31 +00:00
|
|
|
ftpContainer.name = `mcl-${mclName}-ftp`;
|
2023-12-20 03:20:04 +00:00
|
|
|
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) {
|
2024-01-15 20:30:31 +00:00
|
|
|
const { mclName, version, serverType, memory } = serverSpec;
|
2023-12-20 03:20:04 +00:00
|
|
|
const container = loadYaml("lib/k8s/configs/containers/minecraft-server.yml");
|
|
|
|
// Container Updates
|
2024-01-15 20:30:31 +00:00
|
|
|
container.name = `mcl-${mclName}-server`;
|
2023-12-20 03:20:04 +00:00
|
|
|
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
|
2024-01-15 20:30:31 +00:00
|
|
|
const rs = `mcl-${mclName}-rcon-secret`;
|
2023-12-20 03:20:04 +00:00
|
|
|
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
|
2024-01-15 20:30:31 +00:00
|
|
|
/*updateEnv("DIFFICULTY", difficulty);
|
2023-12-20 03:20:04 +00:00
|
|
|
updateEnv("MODE", gamemode);
|
|
|
|
updateEnv("MOTD", motd);
|
|
|
|
updateEnv("MAX_PLAYERS", maxPlayers);
|
|
|
|
updateEnv("SEED", seed);
|
|
|
|
updateEnv("OPS", ops);
|
2024-01-15 20:30:31 +00:00
|
|
|
updateEnv("WHITELIST", whitelist); */
|
2023-12-20 03:20:04 +00:00
|
|
|
|
|
|
|
return container;
|
|
|
|
}
|
|
|
|
|
|
|
|
export function getBackupContainer(serverSpec) {
|
2024-01-15 20:30:31 +00:00
|
|
|
const { mclName, backupEnabled, backupPath } = serverSpec;
|
2023-12-20 03:20:04 +00:00
|
|
|
const container = loadYaml("lib/k8s/configs/containers/minecraft-backup.yml");
|
2024-01-15 20:30:31 +00:00
|
|
|
if (!backupEnabled) return;
|
|
|
|
const findEnv = (k) => container.env.find(({ name: n }) => n === k);
|
|
|
|
const updateEnv = (k, v) => (findEnv(k).value = v);
|
|
|
|
updateEnv("RCLONE_REMOTE", `${mclName}-backup`);
|
|
|
|
updateEnv("RCLONE_DEST_DIR", backupPath);
|
|
|
|
container.name = `mcl-${mclName}-backup`;
|
|
|
|
// RCON
|
|
|
|
const rs = `mcl-${mclName}-rcon-secret`;
|
|
|
|
findEnv("RCON_PASSWORD").valueFrom.secretKeyRef.name = rs;
|
|
|
|
|
2023-12-20 03:20:04 +00:00
|
|
|
return container;
|
|
|
|
}
|