minecluster/lib/k8s/server-delete.js

59 lines
1.9 KiB
JavaScript
Raw Normal View History

import k8s from "@kubernetes/client-node";
import { ERR } from "../util/logging.js";
2023-12-15 21:00:02 -07:00
import { getServerAssets } from "./k8s-server-control.js";
const kc = new k8s.KubeConfig();
kc.loadFromDefault();
const k8sDeps = kc.makeApiClient(k8s.AppsV1Api);
const k8sCore = kc.makeApiClient(k8s.CoreV1Api);
const namespace = process.env.MCL_SERVER_NAMESPACE;
const deleteError = (res) => (err) => {
res.status(500).send("Error deleting a resource!");
ERR("K8S", "An error occurred while deleting a resource", err);
};
2023-12-15 21:07:04 -07:00
function deleteOnExist(o, fn) {
if (o) return fn(o.metadata.name);
2023-12-15 21:00:02 -07:00
}
export default async function deleteServer(req, res) {
const serverSpec = req.body;
if (!serverSpec) return res.sendStatus(400);
if (!serverSpec.name) return res.status(400).send("Server name required!");
const { name } = serverSpec;
// Ensure deployment exists
2023-12-15 21:00:02 -07:00
const server = await getServerAssets(name);
2023-12-16 09:28:06 -07:00
if (!server)
return res.status(404).send("No Resources for that server were found!");
// Delete in reverse order
2023-12-16 09:28:06 -07:00
const deleteDeploy = deleteOnExist(server.deployment, (name) =>
k8sDeps.deleteNamespacedDeployment(name, namespace),
);
2023-12-15 21:00:02 -07:00
2023-12-16 09:28:06 -07:00
const deleteService = deleteOnExist(server.service, (name) =>
k8sCore.deleteNamespacedService(name, namespace),
);
2023-12-16 09:28:06 -07:00
const deleteRconService = deleteOnExist(server.rconService, (name) =>
k8sCore.deleteNamespacedService(name, namespace),
);
2023-12-16 09:28:06 -07:00
if (deleteDeploy) await deleteDeploy.catch(deleteError(res));
2023-12-15 21:07:04 -07:00
2023-12-16 09:28:06 -07:00
const deleteRconSecret = deleteOnExist(server.rconSecret, (name) =>
k8sCore.deleteNamespacedSecret(name, namespace),
);
2023-12-16 09:28:06 -07:00
const deleteVolume = deleteOnExist(server.volume, (name) =>
k8sCore.deleteNamespacedPersistentVolumeClaim(name, namespace),
);
2023-12-15 21:00:02 -07:00
Promise.all([
deleteService,
deleteRconService,
deleteRconSecret,
deleteVolume,
])
.then(() => res.sendStatus(200))
.catch(deleteError(res));
}