mirror of
https://github.com/unraid/api.git
synced 2026-01-13 12:09:52 -06:00
fix: switch libvirt libs
This commit is contained in:
@@ -3,8 +3,10 @@
|
||||
* Written by: Alexis Tyler
|
||||
*/
|
||||
|
||||
import { ConnectListAllDomainsFlags } from '@vmngr/libvirt';
|
||||
import { log } from '../../log';
|
||||
import { CoreResult, CoreContext } from '../../types';
|
||||
import { parseDomains, getHypervisor, ensurePermission } from '../../utils';
|
||||
import { getHypervisor, ensurePermission } from '../../utils';
|
||||
|
||||
/**
|
||||
* Get vm domains.
|
||||
@@ -20,14 +22,19 @@ export const getDomains = async (context: CoreContext): Promise<CoreResult> => {
|
||||
});
|
||||
|
||||
const hypervisor = await getHypervisor();
|
||||
const defined = await parseDomains('name', await hypervisor.listDefinedDomainsAsync());
|
||||
const active = await parseDomains('id', await hypervisor.listActiveDomainsAsync());
|
||||
const activeDomains = await hypervisor.connectListAllDomains(ConnectListAllDomainsFlags.ACTIVE);
|
||||
const inactiveDomains = await hypervisor.connectListAllDomains(ConnectListAllDomainsFlags.INACTIVE);
|
||||
const activeDomainNames = await Promise.all(activeDomains.map(async domain => hypervisor.domainGetName(domain)));
|
||||
const inactiveDomainNames = await Promise.all(inactiveDomains.map(async domain => hypervisor.domainGetName(domain)));
|
||||
|
||||
log.debug('Active: "%s"', activeDomains);
|
||||
log.debug('Inactive: "%s"', inactiveDomains);
|
||||
|
||||
return {
|
||||
text: `Defined domains: ${JSON.stringify(defined, null, 2)}\nActive domains: ${JSON.stringify(active, null, 2)}`,
|
||||
text: `Defined domains: ${JSON.stringify(activeDomainNames, null, 2)}\nActive domains: ${JSON.stringify(inactiveDomainNames, null, 2)}`,
|
||||
json: [
|
||||
...defined,
|
||||
...active
|
||||
...activeDomains,
|
||||
...inactiveDomains
|
||||
]
|
||||
};
|
||||
};
|
||||
|
||||
@@ -5,33 +5,26 @@
|
||||
|
||||
import fs from 'fs';
|
||||
import { AppError } from '../../errors';
|
||||
import { Hypervisor } from '@vmngr/libvirt';
|
||||
|
||||
// Libvirt is an optional dependency
|
||||
let libvirt;
|
||||
let client;
|
||||
const uri = process.env.LIBVIRT_URI ?? 'qemu:///system';
|
||||
|
||||
let hypervisor: Hypervisor;
|
||||
|
||||
export const getHypervisor = async () => {
|
||||
// Return client if it's already connected
|
||||
if (client) {
|
||||
return client;
|
||||
// Return hypervisor if it's already connected
|
||||
if (hypervisor) {
|
||||
return hypervisor;
|
||||
}
|
||||
|
||||
// Check if libvirt service is running and then connect
|
||||
const running = fs.existsSync('/var/run/libvirt/libvirtd.pid');
|
||||
|
||||
if (!running) {
|
||||
throw new AppError('Libvirt service is not running');
|
||||
}
|
||||
|
||||
// Try and get dep loaded or throw error
|
||||
try {
|
||||
libvirt = require('libvirt');
|
||||
} catch {
|
||||
throw new AppError('Libvirt dep is missing.');
|
||||
}
|
||||
hypervisor = new Hypervisor({ uri });
|
||||
await hypervisor.connectOpen();
|
||||
|
||||
// Connect to local socket
|
||||
const { Hypervisor } = libvirt;
|
||||
client = new Hypervisor('qemu:///system');
|
||||
await client.connectAsync();
|
||||
return hypervisor;
|
||||
};
|
||||
|
||||
51
package-lock.json
generated
51
package-lock.json
generated
@@ -1620,6 +1620,16 @@
|
||||
"eslint-plugin-unicorn": "^27.0.0"
|
||||
}
|
||||
},
|
||||
"@vmngr/libvirt": {
|
||||
"version": "0.0.5",
|
||||
"resolved": "https://registry.npmjs.org/@vmngr/libvirt/-/libvirt-0.0.5.tgz",
|
||||
"integrity": "sha512-T1GegDvrEBMaugzCeteAfhkOIgd7qEashXiUaW5wycsoCjDTvylVAkqcTAk972kuRMKmFIFnpOuOWSpDhMtodg==",
|
||||
"requires": {
|
||||
"bindings": "^1.5.0",
|
||||
"node-addon-api": "^1.7.1",
|
||||
"xml2js": "^0.4.22"
|
||||
}
|
||||
},
|
||||
"@wry/context": {
|
||||
"version": "0.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@wry/context/-/context-0.6.0.tgz",
|
||||
@@ -2632,12 +2642,6 @@
|
||||
"safe-buffer": "^5.1.1"
|
||||
}
|
||||
},
|
||||
"bluebird": {
|
||||
"version": "3.7.2",
|
||||
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
|
||||
"integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
|
||||
"optional": true
|
||||
},
|
||||
"blueimp-md5": {
|
||||
"version": "2.18.0",
|
||||
"resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.18.0.tgz",
|
||||
@@ -9448,17 +9452,6 @@
|
||||
"resolved": "https://registry.npmjs.org/libqp/-/libqp-1.1.0.tgz",
|
||||
"integrity": "sha1-9ebgatdLeU+1tbZpiL9yjvHe2+g="
|
||||
},
|
||||
"libvirt": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/libvirt/-/libvirt-1.2.1.tgz",
|
||||
"integrity": "sha1-dQnjmYufjIho9kMowfvuHLdA7lQ=",
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"bindings": "^1.2.1",
|
||||
"bluebird": "^3.1.1",
|
||||
"nan": "^2.4.0"
|
||||
}
|
||||
},
|
||||
"lines-and-columns": {
|
||||
"version": "1.1.6",
|
||||
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
|
||||
@@ -10437,6 +10430,11 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"node-addon-api": {
|
||||
"version": "1.7.2",
|
||||
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz",
|
||||
"integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg=="
|
||||
},
|
||||
"node-cache": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz",
|
||||
@@ -12506,6 +12504,11 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"sax": {
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
|
||||
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
|
||||
},
|
||||
"scheduler": {
|
||||
"version": "0.19.1",
|
||||
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz",
|
||||
@@ -14660,6 +14663,20 @@
|
||||
"resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.2.1.tgz",
|
||||
"integrity": "sha512-sID0rrVCqkVNUn8t6xuv9+6FViXjUVXq8H5rWOH2rz9fDNQEd4g0EA2XlcEdJXRz5BMEn4O1pJFdT+z4YHhoWw=="
|
||||
},
|
||||
"xml2js": {
|
||||
"version": "0.4.23",
|
||||
"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz",
|
||||
"integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==",
|
||||
"requires": {
|
||||
"sax": ">=0.6.0",
|
||||
"xmlbuilder": "~11.0.0"
|
||||
}
|
||||
},
|
||||
"xmlbuilder": {
|
||||
"version": "11.0.1",
|
||||
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
|
||||
"integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="
|
||||
},
|
||||
"xss": {
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmjs.org/xss/-/xss-1.0.8.tgz",
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
"@gridplus/docker-events": "OmgImAlexis/docker-events#master",
|
||||
"@schemastore/package": "0.0.6",
|
||||
"@sentry/node": "^6.3.6",
|
||||
"@vmngr/libvirt": "0.0.5",
|
||||
"accesscontrol": "^2.2.1",
|
||||
"ain2": "^3.0.0",
|
||||
"am": "^1.1.0",
|
||||
@@ -165,9 +166,7 @@
|
||||
"typescript": "4.2.4",
|
||||
"typescript-coverage-report": "^0.5.0"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"libvirt": "^1.2.1"
|
||||
},
|
||||
"optionalDependencies": {},
|
||||
"config": {
|
||||
"commitizen": {
|
||||
"path": "./node_modules/cz-conventional-changelog"
|
||||
@@ -180,6 +179,7 @@
|
||||
"@gridplus/docker-events",
|
||||
"@schemastore/package",
|
||||
"@sentry/node",
|
||||
"@vmngr/libvirt",
|
||||
"accesscontrol",
|
||||
"ain2",
|
||||
"am",
|
||||
@@ -199,6 +199,7 @@
|
||||
"cli-table",
|
||||
"command-exists",
|
||||
"cross-fetch",
|
||||
"dedent-tabs",
|
||||
"deepmerge",
|
||||
"dl-tgz",
|
||||
"dockerode",
|
||||
@@ -270,4 +271,4 @@
|
||||
"uuid-apikey",
|
||||
"xhr2"
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user