[FEATURE] Basic System with file manager (#4)
Co-authored-by: dunemask <dunemask@gmail.com> Co-authored-by: Dunemask <dunemask@gmail.com> Reviewed-on: https://gitea.dunemask.dev/elysium/minecluster/pulls/4
This commit is contained in:
parent
8fb5b34c77
commit
4f19cf19d9
62 changed files with 5910 additions and 1190 deletions
|
@ -1,5 +1,7 @@
|
|||
import k8s from "@kubernetes/client-node";
|
||||
import { ERR } from "../util/logging.js";
|
||||
import { getServerAssets } from "./k8s-server-control.js";
|
||||
import ExpressClientError from "../util/ExpressClientError.js";
|
||||
const kc = new k8s.KubeConfig();
|
||||
kc.loadFromDefault();
|
||||
|
||||
|
@ -7,49 +9,52 @@ 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!");
|
||||
const deleteError = (err) => {
|
||||
ERR("K8S", "An error occurred while deleting a resource", err);
|
||||
throw new ExpressClientError({
|
||||
c: 500,
|
||||
m: "Error deleting a resource!\n" + 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!");
|
||||
function deleteOnExist(o, fn) {
|
||||
if (o) return fn(o.metadata.name);
|
||||
}
|
||||
|
||||
export default async function deleteServerResources(serverSpec) {
|
||||
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)
|
||||
throw new ExpressClientError({
|
||||
c: 404,
|
||||
m: "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
|
||||
if (deleteDeploy) await deleteDeploy.catch(deleteError);
|
||||
|
||||
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([
|
||||
|
||||
return Promise.all([
|
||||
deleteService,
|
||||
deleteRconService,
|
||||
deleteRconSecret,
|
||||
deleteVolume,
|
||||
])
|
||||
.then(() => res.sendStatus(200))
|
||||
.catch(deleteError(res));
|
||||
]).catch(deleteError);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue