This commit is contained in:
William Mantly 2016-01-30 00:19:15 -05:00
parent fe6047b449
commit 1644812213

45
lxc.js
View File

@ -2,38 +2,37 @@
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(){ callback = callback || function(){};
return function(err,data,stderr){
if(!callback) return; return exec(command, callback);
callback(data, err, stderr);
}
})(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){ callback = callback || function(){};
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 +48,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 +84,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 +98,5 @@ var lxc = {
}); });
} }
}; };
module.exports = lxc; module.exports = lxc;