add pci device resource to config,
implement endpoints for getting available devices, update used resource calculation to include pci devices
This commit is contained in:
35
src/pve.js
35
src/pve.js
@@ -71,12 +71,18 @@ export async function getUsedResources(req, resourceMeta) {
|
||||
let used = {};
|
||||
let diskprefixes = [];
|
||||
for (let resourceName of Object.keys(resourceMeta)) {
|
||||
used[resourceName] = 0;
|
||||
if (resourceMeta[resourceName].type === "storage") {
|
||||
used[resourceName] = 0;
|
||||
for (let diskPrefix of resourceMeta[resourceName].disks) {
|
||||
diskprefixes.push(diskPrefix);
|
||||
}
|
||||
}
|
||||
else if (resourceMeta[resourceName].type === "list") {
|
||||
used[resourceName] = [];
|
||||
}
|
||||
else {
|
||||
used[resourceName] = 0;
|
||||
}
|
||||
}
|
||||
for (let instance of response.data.data) {
|
||||
if (instance.type === "lxc" || instance.type === "qemu") {
|
||||
@@ -92,9 +98,13 @@ export async function getUsedResources(req, resourceMeta) {
|
||||
used[diskInfo.storage] += Number(diskInfo.size);
|
||||
}
|
||||
}
|
||||
else if (key.startsWith("net")) {
|
||||
if (config[key].includes("rate=")) { // only count instances with a rate limit
|
||||
used.network += Number(config[key].split("rate=")[1].split(",")[0]);
|
||||
else if (key.startsWith("net") && config[key].includes("rate=")) { // only count net instances with a rate limit
|
||||
used.network += Number(config[key].split("rate=")[1].split(",")[0]);
|
||||
}
|
||||
else if (key.startsWith("hostpci")) {
|
||||
let deviceInfo = await getDeviceInfo(instance.node, instance.type, instance.vmid, config[key].split(",")[0]);
|
||||
if (deviceInfo) { // only count if device exists
|
||||
used.pci.push(deviceInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -115,4 +125,21 @@ export async function getDiskInfo(node, type, vmid, disk) {
|
||||
catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
export async function getDeviceInfo(node, type, vmid, qid) {
|
||||
try {
|
||||
let result = (await requestPVE(`/nodes/${node}/hardware/pci`, "GET", null, null, pveAPIToken)).data.data;
|
||||
let deviceData = [];
|
||||
result.forEach((element) => {
|
||||
if (element.id.startsWith(qid)) {
|
||||
deviceData.push(element);
|
||||
}
|
||||
});
|
||||
deviceData.sort((a, b) => { return a.id < b.id })
|
||||
return deviceData[0].device_name;
|
||||
}
|
||||
catch {
|
||||
return null;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user