56 lines
1.7 KiB
JavaScript
56 lines
1.7 KiB
JavaScript
|
import k8s from "@kubernetes/client-node";
|
||
|
import { ERR } from "../util/logging.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);
|
||
|
};
|
||
|
|
||
|
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
|
||
|
const deploymentRes = await k8sDeps.listNamespacedDeployment(namespace);
|
||
|
const deployments = deploymentRes.body.items.map((i) => i.metadata.name);
|
||
|
if (!deployments.includes(`mcl-${serverSpec.name}`))
|
||
|
return res.status(409).send("Server does not exist!");
|
||
|
// Delete in reverse order
|
||
|
const deleteDeploy = k8sDeps.deleteNamespacedDeployment(
|
||
|
`mcl-${serverSpec.name}`,
|
||
|
namespace
|
||
|
);
|
||
|
const deleteService = k8sCore.deleteNamespacedService(
|
||
|
`mcl-${name}-server`,
|
||
|
namespace
|
||
|
);
|
||
|
const deleteRconService = k8sCore.deleteNamespacedService(
|
||
|
`mcl-${name}-rcon`,
|
||
|
namespace
|
||
|
);
|
||
|
await deleteDeploy.catch(deleteError(res));
|
||
|
const deleteRconSecret = k8sCore.deleteNamespacedSecret(
|
||
|
`mcl-${name}-rcon-secret`,
|
||
|
namespace
|
||
|
);
|
||
|
const deleteVolume = k8sCore.deleteNamespacedPersistentVolumeClaim(
|
||
|
`mcl-${name}-volume`,
|
||
|
namespace
|
||
|
);
|
||
|
Promise.all([
|
||
|
deleteService,
|
||
|
deleteRconService,
|
||
|
deleteRconSecret,
|
||
|
deleteVolume,
|
||
|
])
|
||
|
.then(() => res.sendStatus(200))
|
||
|
.catch(deleteError(res));
|
||
|
}
|