commit
82d63f6aa0
39
lxc.js
39
lxc.js
@ -1,9 +1,10 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
var exec = require('child_process').exec;
|
var exec = require('child_process').exec;
|
||||||
|
|
||||||
function sysExec(command,callback){
|
function sysExec(command, callback){
|
||||||
command = 'unset XDG_SESSION_ID XDG_RUNTIME_DIR; cgm movepid all virt $$; ' + command
|
command = 'unset XDG_SESSION_ID XDG_RUNTIME_DIR; cgm movepid all virt $$; ' + command;
|
||||||
exec(command,(function(){
|
|
||||||
|
return exec(command, (function(){
|
||||||
return function(err,data,stderr){
|
return function(err,data,stderr){
|
||||||
if(!callback) return;
|
if(!callback) return;
|
||||||
callback(data, err, stderr);
|
callback(data, err, stderr);
|
||||||
@ -13,27 +14,27 @@ function sysExec(command,callback){
|
|||||||
|
|
||||||
var lxc = {
|
var lxc = {
|
||||||
create: function(name, template, config, callback){
|
create: function(name, template, config, callback){
|
||||||
sysExec('lxc-create -n '+name+' -t '+template, callback);
|
return sysExec('lxc-create -n '+name+' -t '+template, callback);
|
||||||
},
|
},
|
||||||
|
|
||||||
clone: function(name, base_name, callback){
|
clone: function(name, base_name, callback){
|
||||||
sysExec('lxc-clone -o '+base_name+ ' -n '+name +' -B overlayfs -s', callback);
|
return sysExec('lxc-clone -o '+base_name+ ' -n '+name +' -B overlayfs -s', callback);
|
||||||
},
|
},
|
||||||
|
|
||||||
destroy: function(name, callback){
|
destroy: function(name, callback){
|
||||||
sysExec('lxc-destroy -n '+ name, function(data){
|
return sysExec('lxc-destroy -n '+ name, function(data){
|
||||||
callback(!data.match(/Destroyed container/));
|
callback(!data.match(/Destroyed container/));
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
start: function(name, callback){
|
start: function(name, callback){
|
||||||
var cmd = 'lxc-start --name '+name+' --daemon';
|
var cmd = 'lxc-start --name '+name+' --daemon';
|
||||||
sysExec(cmd, callback);
|
return sysExec(cmd, callback);
|
||||||
},
|
},
|
||||||
|
|
||||||
startEphemeral: function(name, base_name, callback){
|
startEphemeral: function(name, base_name, callback){
|
||||||
var output = '';
|
var command = 'lxc-start-ephemeral -o '+base_name+ ' -n '+name +' --union-type overlayfs -d';
|
||||||
sysExec('lxc-start-ephemeral -o '+base_name+ ' -n '+name +' --union-type overlayfs -d', function(data){
|
return sysExec(command, function(data){
|
||||||
if(data.match("doesn't exist.")){
|
if(data.match("doesn't exist.")){
|
||||||
return callback({status: 500, error: "doesn't exist."});
|
return callback({status: 500, error: "doesn't exist."});
|
||||||
}
|
}
|
||||||
@ -49,19 +50,19 @@ var lxc = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
stop: function(name, callback){
|
stop: function(name, callback){
|
||||||
sysExec('lxc-stop -n '+ name, callback);
|
return sysExec('lxc-stop -n '+ name, callback);
|
||||||
},
|
},
|
||||||
|
|
||||||
freeze: function(name, callback){
|
freeze: function(name, callback){
|
||||||
sysExec('lxc-freeze -n '+name, callback);
|
return sysExec('lxc-freeze -n '+name, callback);
|
||||||
},
|
},
|
||||||
|
|
||||||
unfreeze: function(name, callback){
|
unfreeze: function(name, callback){
|
||||||
sysExec('lxc-unfreeze -n '+name, callback);
|
return sysExec('lxc-unfreeze -n '+name, callback);
|
||||||
},
|
},
|
||||||
|
|
||||||
info: function(name, callback){
|
info: function(name, callback){
|
||||||
sysExec('lxc-info -n '+name, function(data){
|
return sysExec('lxc-info -n '+name, function(data){
|
||||||
if(data.match("doesn't exist")){
|
if(data.match("doesn't exist")){
|
||||||
return callback({state: 'NULL'});
|
return callback({state: 'NULL'});
|
||||||
}
|
}
|
||||||
@ -85,12 +86,13 @@ var lxc = {
|
|||||||
keys = keys.map(function(v){return v.toLowerCase()});
|
keys = keys.map(function(v){return v.toLowerCase()});
|
||||||
output = output.slice(0).splice(1).slice(0,-1);
|
output = output.slice(0).splice(1).slice(0,-1);
|
||||||
|
|
||||||
for (var i in output)
|
for(var i in output){
|
||||||
{
|
|
||||||
|
|
||||||
var aIn = output[i].split(/\s+/).slice(0,-1),
|
var aIn = output[i].split(/\s+/).slice(0,-1);
|
||||||
mapOut = {};
|
var mapOut = {};
|
||||||
aIn.map( function(v,i){ mapOut[keys[i]] = v; } );
|
aIn.map(function(value,idx){
|
||||||
|
mapOut[keys[idx]] = value;
|
||||||
|
});
|
||||||
info.push(mapOut);
|
info.push(mapOut);
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -98,4 +100,5 @@ var lxc = {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = lxc;
|
module.exports = lxc;
|
||||||
|
@ -8,9 +8,10 @@ var client = redis.createClient();
|
|||||||
var lxc = require('../lxc');
|
var lxc = require('../lxc');
|
||||||
|
|
||||||
router.get('/start/:name', function(req, res, next){
|
router.get('/start/:name', function(req, res, next){
|
||||||
lxc.start(req.params.name, function(status, message){
|
lxc.start(req.params.name, function(data){
|
||||||
if(status){
|
console.log('start', arguments);
|
||||||
res.json({status: 500, name: req.params.name, message: message});
|
if(!data){
|
||||||
|
res.json({status: 500, name: req.params.name, message: data});
|
||||||
}else{
|
}else{
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
lxc.info(req.params.name, null, function(data){
|
lxc.info(req.params.name, null, function(data){
|
||||||
@ -32,12 +33,14 @@ router.get('/start/:name', function(req, res, next){
|
|||||||
|
|
||||||
router.get('/live/:template/:name', function(req, res, next){
|
router.get('/live/:template/:name', function(req, res, next){
|
||||||
lxc.startEphemeral(req.params.name, req.params.template, function (data) {
|
lxc.startEphemeral(req.params.name, req.params.template, function (data) {
|
||||||
|
console.log('live', arguments);
|
||||||
res.json(data);
|
res.json(data);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/stop/:name', function(req, res, next){
|
router.get('/stop/:name', function(req, res, next){
|
||||||
lxc.stop(req.params.name, function(data){
|
lxc.stop(req.params.name, function(data){
|
||||||
|
console.log('stop', arguments);
|
||||||
if(data){
|
if(data){
|
||||||
res.json({status: 500, name: req.params.name, message: data});
|
res.json({status: 500, name: req.params.name, message: data});
|
||||||
}else{
|
}else{
|
||||||
@ -48,6 +51,7 @@ router.get('/stop/:name', function(req, res, next){
|
|||||||
|
|
||||||
router.get('/clone/:template/:name', function(req, res, next){
|
router.get('/clone/:template/:name', function(req, res, next){
|
||||||
lxc.clone(req.params.name, req.params.template, function(data){
|
lxc.clone(req.params.name, req.params.template, function(data){
|
||||||
|
console.log('clone', arguments);
|
||||||
if( data.match(/Created container/) ){
|
if( data.match(/Created container/) ){
|
||||||
res.json({status: 200});
|
res.json({status: 200});
|
||||||
}else{
|
}else{
|
||||||
@ -58,6 +62,7 @@ router.get('/clone/:template/:name', function(req, res, next){
|
|||||||
|
|
||||||
router.get('/destroy/:name', function(req, res, next){
|
router.get('/destroy/:name', function(req, res, next){
|
||||||
lxc.destroy(req.params.name, function(data){
|
lxc.destroy(req.params.name, function(data){
|
||||||
|
console.log('destroy', arguments);
|
||||||
if(data){
|
if(data){
|
||||||
res.json({status: 500, message: data});
|
res.json({status: 500, message: data});
|
||||||
}else{
|
}else{
|
||||||
@ -68,12 +73,14 @@ router.get('/destroy/:name', function(req, res, next){
|
|||||||
|
|
||||||
router.get('/info/:name', function(req, res, next){
|
router.get('/info/:name', function(req, res, next){
|
||||||
lxc.info(req.params.name, function(data){
|
lxc.info(req.params.name, function(data){
|
||||||
|
console.log('info', arguments);
|
||||||
res.json(data);
|
res.json(data);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/list', function(req, res, next) {
|
router.get('/list', function(req, res, next) {
|
||||||
lxc.list(function(data){
|
lxc.list(function(data){
|
||||||
|
console.log('list', arguments);
|
||||||
res.json(data);
|
res.json(data);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user