add vmid range check to instance creation,

add configurable templates to instance creation

Signed-off-by: Arthur Lu <learthurgo@gmail.com>
This commit is contained in:
Arthur Lu 2023-04-20 21:27:32 +00:00
parent c3160f760f
commit 9ccb9edf44
2 changed files with 26 additions and 5 deletions

View File

@ -36,6 +36,21 @@
"local": 1099511627776, "local": 1099511627776,
"cephpl": 1099511627776 "cephpl": 1099511627776
} }
},
"instances": {
"vmid": {
"min": 100,
"max": 199
},
"pool": "examplegroup",
"templates": {
"lxc": {
"net0": "name=eth0,bridge=vmbr0,ip=dhcp,ip6=dhcp,tag=10,type=veth"
},
"qemu": {
"net0": "virtio,bridge=vmbr0,tag=10"
}
}
} }
} }
} }

16
main.js
View File

@ -247,17 +247,23 @@ app.post("/api/instance", async (req, res) => {
memory: Number(req.body.memory) memory: Number(req.body.memory)
}; };
// setup action // setup action
let user = await requestPVE(`/access/users/${req.cookies.username}`, "GET", null, null, pveAPIToken); let user = getUser(req.cookies.username);
let group = user.data.data.groups[0]; let vmid = Number.parseInt(req.body.vmid);
if (!group) { let vmid_min = user.instances.vmid.min;
res.status(500).send({error: `user ${req.cookies.username} has no group membership`}); let vmid_max = user.instances.vmid.max;
if (vmid < vmid_min || vmid > vmid_max) {
res.status(500).send({error: `Requested vmid ${vmid} is out of allowed range [${vmid_min},${vmid_max}]`});
return;
} }
let action = { let action = {
vmid: req.body.vmid, vmid: req.body.vmid,
cores: req.body.cores, cores: req.body.cores,
memory: req.body.memory, memory: req.body.memory,
pool: group pool: user.instances.pool
}; };
for (key of Object.keys(user.instances.templates[req.body.type])) {
action[key] = user.instances.templates[req.body.type][key];
}
if (req.body.type === "lxc") { if (req.body.type === "lxc") {
action.swap = req.body.swap; action.swap = req.body.swap;
action.hostname = req.body.name; action.hostname = req.body.name;