mirror of
https://github.com/mclueppers/xo-server.git
synced 2025-07-29 08:54:44 +02:00
Various updates.
This commit is contained in:
parent
199d107914
commit
20e675a080
@ -558,7 +558,7 @@ Api.fn.xo = {
|
|||||||
|
|
||||||
Api.fn.xapi = {
|
Api.fn.xapi = {
|
||||||
'__catchAll': function (session, req) {
|
'__catchAll': function (session, req) {
|
||||||
var RE = /^xapi\.(pool|host|vm|network|sr|vdi)\.getAll$/;
|
var RE = /^xapi\.(pool|host|vm|network|sr|vdi|pif|vif)\.getAll$/;
|
||||||
var match;
|
var match;
|
||||||
if (!(match = req.method.match(RE)))
|
if (!(match = req.method.match(RE)))
|
||||||
{
|
{
|
||||||
|
149
src/xo.js
149
src/xo.js
@ -31,14 +31,21 @@ var check = function () {
|
|||||||
}();
|
}();
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
// Models
|
// Models & Collections.
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
var Server = Model.extend({
|
var Server = Model.extend({
|
||||||
'validate': function () {
|
'validate': function () {
|
||||||
|
// @todo
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var Servers = Collection.extend({
|
||||||
|
'model': Server,
|
||||||
|
});
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
// @todo We could also give a permission level to tokens (<=
|
// @todo We could also give a permission level to tokens (<=
|
||||||
// user.permission).
|
// user.permission).
|
||||||
var Token = Model.extend({
|
var Token = Model.extend({
|
||||||
@ -60,6 +67,19 @@ var Token = Model.extend({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var Tokens = Collection.extend({
|
||||||
|
'model': Token,
|
||||||
|
|
||||||
|
'generate': function (user_id) {
|
||||||
|
var self = this;
|
||||||
|
return Token.generate(user_id).then(function (token) {
|
||||||
|
return self.add(token);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
var User = Model.extend({
|
var User = Model.extend({
|
||||||
'default': {
|
'default': {
|
||||||
'permission': 'none',
|
'permission': 'none',
|
||||||
@ -114,37 +134,6 @@ var User = Model.extend({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
var Pool = Model.extend({});
|
|
||||||
|
|
||||||
var Host = Model.extend({});
|
|
||||||
|
|
||||||
var VM = Model.extend({});
|
|
||||||
|
|
||||||
var Network = Model.extend({});
|
|
||||||
|
|
||||||
var SR = Model.extend({});
|
|
||||||
|
|
||||||
var VDI = Model.extend({});
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
// Collections
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
var Servers = Collection.extend({
|
|
||||||
'model': Server,
|
|
||||||
});
|
|
||||||
|
|
||||||
var Tokens = Collection.extend({
|
|
||||||
'model': Token,
|
|
||||||
|
|
||||||
'generate': function (user_id) {
|
|
||||||
var self = this;
|
|
||||||
return Token.generate(user_id).then(function (token) {
|
|
||||||
return self.add(token);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// @todo handle email uniqueness.
|
// @todo handle email uniqueness.
|
||||||
var Users = Collection.extend({
|
var Users = Collection.extend({
|
||||||
'model': User,
|
'model': User,
|
||||||
@ -165,26 +154,74 @@ var Users = Collection.extend({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
|
var Pool = Model.extend({});
|
||||||
|
|
||||||
var Pools = Collection.extend({
|
var Pools = Collection.extend({
|
||||||
'model': Pool,
|
'model': Pool,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
|
var Host = Model.extend({});
|
||||||
|
|
||||||
var Hosts = Collection.extend({
|
var Hosts = Collection.extend({
|
||||||
'model': Host,
|
'model': Host,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
|
var VM = Model.extend({});
|
||||||
|
|
||||||
var VMs = Collection.extend({
|
var VMs = Collection.extend({
|
||||||
'model': VM,
|
'model': VM,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
|
var Network = Model.extend({});
|
||||||
|
|
||||||
var Networks = Collection.extend({
|
var Networks = Collection.extend({
|
||||||
'model': Network,
|
'model': Network,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
|
var SR = Model.extend({});
|
||||||
|
|
||||||
var SRs = Collection.extend({
|
var SRs = Collection.extend({
|
||||||
'model': SR,
|
'model': SR,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
|
var VDI = Model.extend({});
|
||||||
|
|
||||||
|
var VDIs = Collection.extend({
|
||||||
|
'model': VDI,
|
||||||
|
});
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
|
var PIF = Model.extend({});
|
||||||
|
|
||||||
|
var PIFs = Collection.extend({
|
||||||
|
'model': PIF,
|
||||||
|
});
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
|
var VIF = Model.extend({});
|
||||||
|
|
||||||
|
var VIFs = Collection.extend({
|
||||||
|
'model': VIF,
|
||||||
|
});
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
// Collections
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
var VDIs = Collection.extend({
|
var VDIs = Collection.extend({
|
||||||
'model': VDI,
|
'model': VDI,
|
||||||
});
|
});
|
||||||
@ -233,7 +270,9 @@ function Xo()
|
|||||||
this.srs = new SRs();
|
this.srs = new SRs();
|
||||||
this.vdis = new VDIs();
|
this.vdis = new VDIs();
|
||||||
|
|
||||||
// Connecting classes: VIF & PIF, VBD & SR.
|
// Connecting classes. (@todo VBD & SR).
|
||||||
|
this.vifs = new VIFs();
|
||||||
|
this.pifs = new PIFs();
|
||||||
|
|
||||||
// -------------------------------------
|
// -------------------------------------
|
||||||
// Temporary data for testing purposes.
|
// Temporary data for testing purposes.
|
||||||
@ -297,6 +336,9 @@ Xo.prototype.start = function () {
|
|||||||
'SR',
|
'SR',
|
||||||
'VDI',
|
'VDI',
|
||||||
|
|
||||||
|
'PIF',
|
||||||
|
'VIF',
|
||||||
|
|
||||||
// Associated classes (e.g. metrics).
|
// Associated classes (e.g. metrics).
|
||||||
'console',
|
'console',
|
||||||
'crashdump',
|
'crashdump',
|
||||||
@ -309,10 +351,10 @@ Xo.prototype.start = function () {
|
|||||||
'PBD',
|
'PBD',
|
||||||
'PCI',
|
'PCI',
|
||||||
'PGPU',
|
'PGPU',
|
||||||
'PIF',
|
'PIF_metrics',
|
||||||
'VBD',
|
'VBD',
|
||||||
'VGPU',
|
'VGPU',
|
||||||
'VIF',
|
'VIF_metrics',
|
||||||
'VM_appliance',
|
'VM_appliance',
|
||||||
'VM_metrics',
|
'VM_metrics',
|
||||||
'VM_guest_metrics',
|
'VM_guest_metrics',
|
||||||
@ -328,6 +370,9 @@ Xo.prototype.start = function () {
|
|||||||
srs,
|
srs,
|
||||||
vdis,
|
vdis,
|
||||||
|
|
||||||
|
pifs,
|
||||||
|
vifs,
|
||||||
|
|
||||||
consoles,
|
consoles,
|
||||||
crashdumps,
|
crashdumps,
|
||||||
dr_tasks,
|
dr_tasks,
|
||||||
@ -339,10 +384,10 @@ Xo.prototype.start = function () {
|
|||||||
pbds,
|
pbds,
|
||||||
pcis,
|
pcis,
|
||||||
pgpus,
|
pgpus,
|
||||||
pifs,
|
pif_metrics,
|
||||||
vbds,
|
vbds,
|
||||||
vgpus,
|
vgpus,
|
||||||
vifs,
|
vif_metrics,
|
||||||
vm_appliances,
|
vm_appliances,
|
||||||
vm_metrics,
|
vm_metrics,
|
||||||
vm_guest_metrics,
|
vm_guest_metrics,
|
||||||
@ -379,13 +424,21 @@ Xo.prototype.start = function () {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var map = function (list, iterator) {
|
||||||
|
var result = _.isArray(list) ? [] : {};
|
||||||
|
_.each(list, function (value, key) {
|
||||||
|
result[key] = iterator(value);
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
|
||||||
for (var i = 0, n = props.length; i < n; ++i)
|
for (var i = 0, n = props.length; i < n; ++i)
|
||||||
{
|
{
|
||||||
var prop = props[i];
|
var prop = props[i];
|
||||||
var ref = model[prop];
|
var ref = model[prop];
|
||||||
|
|
||||||
model[prop] = _.isArray(ref)
|
model[prop] = _.isArray(ref)
|
||||||
? _.map(ref, helper) // @todo Correctly handle objects.
|
? map(ref, helper)
|
||||||
: helper(ref);
|
: helper(ref);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -393,6 +446,8 @@ Xo.prototype.start = function () {
|
|||||||
// @todo Messages are linked differently.
|
// @todo Messages are linked differently.
|
||||||
messages = _.groupBy(messages, 'obj_uuid');
|
messages = _.groupBy(messages, 'obj_uuid');
|
||||||
|
|
||||||
|
// @todo Cast numerical/boolean properties to correct types.
|
||||||
|
|
||||||
// Resolves dependencies.
|
// Resolves dependencies.
|
||||||
//
|
//
|
||||||
// 1. Associated objects are included.
|
// 1. Associated objects are included.
|
||||||
@ -427,7 +482,7 @@ Xo.prototype.start = function () {
|
|||||||
resolve(host, pbds, 'PBDs', true);
|
resolve(host, pbds, 'PBDs', true);
|
||||||
resolve(host, pcis, 'PCIs', true);
|
resolve(host, pcis, 'PCIs', true);
|
||||||
resolve(host, pgpus, 'PGPUs', true);
|
resolve(host, pgpus, 'PGPUs', true);
|
||||||
resolve(host, pifs, 'PIFs', true);
|
resolve(host, pifs, 'PIFs');
|
||||||
resolve(host, vms, 'resident_VMs');
|
resolve(host, vms, 'resident_VMs');
|
||||||
});
|
});
|
||||||
_.each(vms, function (vm) {
|
_.each(vms, function (vm) {
|
||||||
@ -447,7 +502,7 @@ Xo.prototype.start = function () {
|
|||||||
resolve(vm, consoles, 'consoles', true);
|
resolve(vm, consoles, 'consoles', true);
|
||||||
resolve(vm, crashdumps, 'crash_dumps', true);
|
resolve(vm, crashdumps, 'crash_dumps', true);
|
||||||
resolve(vm, vm_guest_metrics, 'guest_metrics', true);
|
resolve(vm, vm_guest_metrics, 'guest_metrics', true);
|
||||||
vm.messages = messages[vm.uuid] || null; // @todo
|
vm.messages = messages[vm.uuid] || []; // @todo
|
||||||
resolve(vm, vm_metrics, 'metrics', true);
|
resolve(vm, vm_metrics, 'metrics', true);
|
||||||
resolve(vm, vmpps, 'protection_policy', true);
|
resolve(vm, vmpps, 'protection_policy', true);
|
||||||
resolve(vm, srs, 'suspend_SR');
|
resolve(vm, srs, 'suspend_SR');
|
||||||
@ -466,7 +521,7 @@ Xo.prototype.start = function () {
|
|||||||
_.each(srs, function (sr) {
|
_.each(srs, function (sr) {
|
||||||
// @todo Blobs?
|
// @todo Blobs?
|
||||||
|
|
||||||
resolve(sr, dr_tasks, 'introduced_by');
|
resolve(sr, dr_tasks, 'introduced_by'); // @todo.
|
||||||
resolve(sr, pbds, 'PBDs');
|
resolve(sr, pbds, 'PBDs');
|
||||||
resolve(sr, vdis, 'VDIs');
|
resolve(sr, vdis, 'VDIs');
|
||||||
});
|
});
|
||||||
@ -481,6 +536,18 @@ Xo.prototype.start = function () {
|
|||||||
resolve(vdi, srs, 'SR');
|
resolve(vdi, srs, 'SR');
|
||||||
resolve(vdi, vbds, 'VBDs');
|
resolve(vdi, vbds, 'VBDs');
|
||||||
});
|
});
|
||||||
|
_.each(pifs, function (pif) {
|
||||||
|
// @todo Bonds, tunnels & VLANs.
|
||||||
|
|
||||||
|
resolve(pif, hosts, 'host');
|
||||||
|
resolve(pif, pif_metrics, 'metrics');
|
||||||
|
resolve(pif, networks, 'network');
|
||||||
|
});
|
||||||
|
_.each(vifs, function (vif) {
|
||||||
|
resolve(vif, vif_metrics, 'metrics');
|
||||||
|
resolve(vif, networks, 'network');
|
||||||
|
resolve(vif, vms, 'VM');
|
||||||
|
});
|
||||||
|
|
||||||
// Normalizes the collections.
|
// Normalizes the collections.
|
||||||
//
|
//
|
||||||
|
Loading…
x
Reference in New Issue
Block a user