2023-03-15 15:20:08 +00:00
|
|
|
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";
|
2023-03-15 15:20:08 +00:00
|
|
|
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:00:02 -07:00
|
|
|
async function deleteOnExist(o, fn) {
|
|
|
|
if (!o) return;
|
|
|
|
return fn(o.metadata.name);
|
|
|
|
}
|
|
|
|
|
2023-03-15 15:20:08 +00: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);
|
|
|
|
if (!server) return res.status(404).send("No Resources for that server were found!");
|
2023-03-15 15:20:08 +00:00
|
|
|
// Delete in reverse order
|
2023-12-15 21:00:02 -07:00
|
|
|
const deleteDeploy = deleteOnExist(
|
|
|
|
server.deployment,
|
|
|
|
(name)=> k8sDeps.deleteNamespacedDeployment(name, namespace),
|
2023-03-15 15:20:08 +00:00
|
|
|
);
|
2023-12-15 21:00:02 -07:00
|
|
|
|
|
|
|
const deleteService = deleteOnExist(
|
|
|
|
server.service,
|
|
|
|
(name) => k8sCore.deleteNamespacedService(name, namespace),
|
2023-03-15 15:20:08 +00:00
|
|
|
);
|
2023-12-15 21:00:02 -07:00
|
|
|
const deleteRconService = deleteOnExist(
|
|
|
|
server.rconService,
|
|
|
|
(name) => k8sCore.deleteNamespacedService(name, namespace),
|
2023-03-15 15:20:08 +00:00
|
|
|
);
|
2023-12-15 21:00:02 -07:00
|
|
|
try {
|
|
|
|
await deleteDeploy;
|
|
|
|
} catch (e) {
|
|
|
|
return deleteError(res)(e);
|
|
|
|
}
|
|
|
|
const deleteRconSecret = deleteOnExist(
|
|
|
|
server.rconSecret,
|
|
|
|
(name)=> k8sCore.deleteNamespacedSecret(name, namespace),
|
2023-03-15 15:20:08 +00:00
|
|
|
);
|
2023-12-15 21:00:02 -07:00
|
|
|
const deleteVolume = deleteOnExist(
|
|
|
|
server.volume,
|
|
|
|
(name)=>k8sCore.deleteNamespacedPersistentVolumeClaim(name, namespace),
|
2023-03-15 15:20:08 +00:00
|
|
|
);
|
2023-12-15 21:00:02 -07:00
|
|
|
|
2023-03-15 15:20:08 +00:00
|
|
|
Promise.all([
|
|
|
|
deleteService,
|
|
|
|
deleteRconService,
|
|
|
|
deleteRconSecret,
|
|
|
|
deleteVolume,
|
|
|
|
])
|
|
|
|
.then(() => res.sendStatus(200))
|
|
|
|
.catch(deleteError(res));
|
|
|
|
}
|