add pool selection to instance create,
allow multiple pools per user
This commit is contained in:
parent
3281788089
commit
98479205d9
@ -145,6 +145,7 @@ router.post(`${basePath}/create`, async (req, res) => {
|
||||
vmid: req.params.vmid,
|
||||
hostname: req.body.hostname,
|
||||
name: req.body.name,
|
||||
pool: req.body.pool,
|
||||
cores: req.body.cores,
|
||||
memory: req.body.memory,
|
||||
swap: req.body.swap,
|
||||
@ -206,7 +207,7 @@ router.post(`${basePath}/create`, async (req, res) => {
|
||||
vmid: params.vmid,
|
||||
cores: Number(params.cores),
|
||||
memory: Number(params.memory),
|
||||
pool: user.cluster.pool
|
||||
pool: params.pool // TODO allow user to select pool to assign VM
|
||||
};
|
||||
for (const key of Object.keys(user.templates.instances[params.type])) {
|
||||
action[key] = user.templates.instances[params.type][key].value;
|
||||
|
@ -63,7 +63,7 @@ if (schemes.hash.enabled) {
|
||||
// setup interupt scheme
|
||||
if (schemes.interrupt.enabled) {
|
||||
const wsServer = new WebSocketServer({ noServer: true, path: "/api/sync/interrupt" });
|
||||
wsServer.on("connection", (socket, username, pool) => {
|
||||
wsServer.on("connection", (socket, username, pools) => {
|
||||
// add new socket to userSocketmap
|
||||
if (userSocketMap[username]) {
|
||||
const index = Object.keys(userSocketMap[username]).length;
|
||||
@ -74,7 +74,8 @@ if (schemes.interrupt.enabled) {
|
||||
userSocketMap[username] = { 0: socket };
|
||||
socket.userIndex = 0;
|
||||
}
|
||||
// add user to associated pool in poolUserMap
|
||||
// for each pool, add user to associated pool in poolUserMap
|
||||
for (const pool of pools) {
|
||||
if (poolUserMap[pool]) {
|
||||
poolUserMap[pool][username] = true;
|
||||
}
|
||||
@ -82,6 +83,7 @@ if (schemes.interrupt.enabled) {
|
||||
poolUserMap[pool] = {};
|
||||
poolUserMap[pool][username] = true;
|
||||
}
|
||||
}
|
||||
// add socket entry into requestedRates
|
||||
const index = Object.keys(requestedRates).length;
|
||||
requestedRates[index] = Infinity;
|
||||
@ -96,13 +98,15 @@ if (schemes.interrupt.enabled) {
|
||||
if (Object.keys(userSocketMap[username]).length === 0) {
|
||||
// delete the user entry
|
||||
delete userSocketMap[username];
|
||||
// remove user from poolUserMap pool entry
|
||||
// remove user from poolUserMap entry for each pool
|
||||
for (const pool of pools) {
|
||||
delete poolUserMap[pool][username];
|
||||
// if the poolUserMap pool entry is empty, delete the entry
|
||||
if (Object.keys(poolUserMap[pool]).length === 0) {
|
||||
delete poolUserMap[pool];
|
||||
}
|
||||
}
|
||||
}
|
||||
// remove socket entry from requestedRates
|
||||
delete requestedRates[socket.rateIndex];
|
||||
if (Object.keys(requestedRates).length === 0) { // if there are no requested rates left, clear the timer
|
||||
@ -154,6 +158,7 @@ if (schemes.interrupt.enabled) {
|
||||
});
|
||||
// handle the wss upgrade request
|
||||
global.server.on("upgrade", async (req, socket, head) => {
|
||||
// basic auth validation
|
||||
const cookies = cookie.parse(req.headers.cookie || "");
|
||||
const auth = (await global.pve.requestPVE("/version", "GET", { cookies })).status === 200;
|
||||
if (!auth) {
|
||||
@ -161,8 +166,10 @@ if (schemes.interrupt.enabled) {
|
||||
}
|
||||
else {
|
||||
wsServer.handleUpgrade(req, socket, head, (socket) => {
|
||||
const pool = global.db.getUser(cookies.username).cluster.pool;
|
||||
wsServer.emit("connection", socket, cookies.username, pool);
|
||||
// get the user pools
|
||||
const pools = global.db.getUser(cookies.username).cluster.pools;
|
||||
// emit the connection to initialize socket
|
||||
wsServer.emit("connection", socket, cookies.username, pools);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
@ -81,7 +81,10 @@
|
||||
"min": 100,
|
||||
"max": 199
|
||||
},
|
||||
"pool": "examplepool"
|
||||
"pools": [
|
||||
"examplepool1",
|
||||
"examplepool2"
|
||||
]
|
||||
},
|
||||
"templates": {
|
||||
"instances": {
|
||||
|
Loading…
Reference in New Issue
Block a user