[FEATURE] Adjust resource flow

This commit is contained in:
Dunemask 2023-12-15 21:00:02 -07:00
parent 360dd32860
commit 61bf66c5c1
11 changed files with 202 additions and 86 deletions

View file

@ -1,5 +1,6 @@
import k8s from "@kubernetes/client-node";
import { ERR } from "../util/logging.js";
import { getServerAssets } from "./k8s-server-control.js";
const kc = new k8s.KubeConfig();
kc.loadFromDefault();
@ -12,38 +13,47 @@ const deleteError = (res) => (err) => {
ERR("K8S", "An error occurred while deleting a resource", err);
};
async function deleteOnExist(o, fn) {
if (!o) return;
return fn(o.metadata.name);
}
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!");
const server = await getServerAssets(name);
if (!server) return res.status(404).send("No Resources for that server were found!");
// Delete in reverse order
const deleteDeploy = k8sDeps.deleteNamespacedDeployment(
`mcl-${serverSpec.name}`,
namespace,
const deleteDeploy = deleteOnExist(
server.deployment,
(name)=> k8sDeps.deleteNamespacedDeployment(name, namespace),
);
const deleteService = k8sCore.deleteNamespacedService(
`mcl-${name}-server`,
namespace,
const deleteService = deleteOnExist(
server.service,
(name) => k8sCore.deleteNamespacedService(name, namespace),
);
const deleteRconService = k8sCore.deleteNamespacedService(
`mcl-${name}-rcon`,
namespace,
const deleteRconService = deleteOnExist(
server.rconService,
(name) => k8sCore.deleteNamespacedService(name, namespace),
);
await deleteDeploy.catch(deleteError(res));
const deleteRconSecret = k8sCore.deleteNamespacedSecret(
`mcl-${name}-rcon-secret`,
namespace,
try {
await deleteDeploy;
} catch (e) {
return deleteError(res)(e);
}
const deleteRconSecret = deleteOnExist(
server.rconSecret,
(name)=> k8sCore.deleteNamespacedSecret(name, namespace),
);
const deleteVolume = k8sCore.deleteNamespacedPersistentVolumeClaim(
`mcl-${name}-volume`,
namespace,
const deleteVolume = deleteOnExist(
server.volume,
(name)=>k8sCore.deleteNamespacedPersistentVolumeClaim(name, namespace),
);
Promise.all([
deleteService,
deleteRconService,