Merge pull request #4 from wmantly/new

New
This commit is contained in:
William Mantly 2016-01-29 18:39:59 -05:00
commit 5c9d3f57b0
2 changed files with 49 additions and 46 deletions

75
lxc.js
View File

@ -1,62 +1,66 @@
'use strict'; 'use strict';
module.exports = function(config){
var obj = {};
var cmd = require('node-cmd'); var cmd = require('node-cmd');
var sysExec = function(command, callback){ var sysExec = function(command, callback){
// console.log('sysExec: ', command, '||| callback:', callback) // console.log('sysExec: ', command, '||| callback:', callback)
cmd.get('unset XDG_SESSION_ID XDG_RUNTIME_DIR; cgm movepid all virt $$; '+command, callback) cmd.get('unset XDG_SESSION_ID XDG_RUNTIME_DIR; cgm movepid all virt $$; '+command, callback);
} };
obj.create = function(name, template, config, cbComplete){ var lxc = {
create: function(name, template, config, cbComplete){
sysExec('lxc-create -n '+name+' -t '+template, cbComplete); sysExec('lxc-create -n '+name+' -t '+template, cbComplete);
}; },
obj.clone = function(name, base_name, callback){ clone: function(name, base_name, callback){
sysExec('lxc-clone -o '+base_name+ ' -n '+name +' -B overlayfs -s', callback); sysExec('lxc-clone -o '+base_name+ ' -n '+name +' -B overlayfs -s', callback);
}; },
obj.destroy = function(name, callback){ destroy: function(name, callback){
sysExec('lxc-destroy -n '+ name, function(data){ sysExec('lxc-destroy -n '+ name, function(data){
callback(!data.match(/Destroyed container/)) callback(!data.match(/Destroyed container/));
}); });
}; },
obj.start = function(name, callback){ start: function(name, callback){
var cmd = 'lxc-start --name '+name+' --daemon'; var cmd = 'lxc-start --name '+name+' --daemon';
console.log('start cmd\n', cmd, '\n');
sysExec(cmd, callback); sysExec(cmd, callback);
}; },
obj.startEphemeral = function(name, base_name, callback){ startEphemeral: function(name, base_name, callback){
var output = ''; var output = '';
sysExec('lxc-start-ephemeral -o '+base_name+ ' -n '+name +' --union-type overlayfs -d', function(data){ sysExec('lxc-start-ephemeral -o '+base_name+ ' -n '+name +' --union-type overlayfs -d', function(data){
if(data.match("doesn't exist.")) return callback({status: 500, error: "doesn't exist."}); if(data.match("doesn't exist.")){
if(data.match("already exists.")) return callback({status: 500, error: "already exists"}); return callback({status: 500, error: "doesn't exist."});
if(data.match(/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/)) return callback({status: 200, state:'RUNNING', ip: data.match(/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/)[0]}); }
if(data.match("already exists.")){
return callback({status: 500, error: "already exists"});
}
if(data.match(/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/)){
return callback({status: 200, state:'RUNNING', ip: data.match(/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/)[0]});
}
callback({'?': '?', data: data, name: name, base_name: base_name}); callback({'?': '?', data: data, name: name, base_name: base_name});
}); });
}; },
obj.stop = function(name, callback){ stop: function(name, callback){
console.log('stop', name);
sysExec('lxc-stop -n '+ name, callback); sysExec('lxc-stop -n '+ name, callback);
}; },
obj.freeze = function(name, callback){ freeze: function(name, callback){
sysExec('lxc-freeze -n '+name, callback); sysExec('lxc-freeze -n '+name, callback);
}; },
obj.unfreeze = function(name, callback){ unfreeze: function(name, callback){
sysExec('lxc-unfreeze -n '+name, callback); sysExec('lxc-unfreeze -n '+name, callback);
}; },
obj.info = function(name, callback){ info: function(name, callback){
var output = '';
sysExec('lxc-info -n '+name, function(data){ sysExec('lxc-info -n '+name, function(data){
console.log('info', name, data) if(data.match("doesn't exist")){
if(data.match("doesn't exist")) return callback({state: 'NULL'}); return callback({state: 'NULL'});
}
var info = {}; var info = {};
data = data.replace(/\suse/ig, '').replace(/\sbytes/ig, '').split("\n").slice(0,-1); data = data.replace(/\suse/ig, '').replace(/\sbytes/ig, '').split("\n").slice(0,-1);
for(var i in data){ for(var i in data){
@ -65,9 +69,9 @@ module.exports = function(config){
} }
callback(info); callback(info);
}); });
}; },
obj.list = function(callback){ list: function(callback){
sysExec('lxc-ls --fancy', function(data){ sysExec('lxc-ls --fancy', function(data){
var output = data.split("\n"); var output = data.split("\n");
var keys = output.splice(0,1)[0].split(/\s+/).slice(0,-1); var keys = output.splice(0,1)[0].split(/\s+/).slice(0,-1);
@ -87,7 +91,6 @@ module.exports = function(config){
} }
callback(info); callback(info);
}); });
}
}; };
module.exports = lxc;
return obj;
};

View File

@ -5,7 +5,7 @@ var router = express.Router();
var extend = require('node.extend'); var extend = require('node.extend');
var redis = require("redis"); var redis = require("redis");
var client = redis.createClient(); var client = redis.createClient();
var lxc = require('../lxc')(); var lxc = require('../lxc');
//lxc.startEphemeral('ubuntu_template', 'ue0', function(){console.log('cb1', arguments)}, function(){console.log('cb2', arguments)}) //lxc.startEphemeral('ubuntu_template', 'ue0', function(){console.log('cb1', arguments)}, function(){console.log('cb2', arguments)})
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(status, message){
@ -37,9 +37,9 @@ router.get('/live/:template/:name', function(req, res, next){
}); });
router.get('/stop/:name', function(req, res, next){ router.get('/stop/:name', function(req, res, next){
lxc.stop(req.params.name, function(data, message){ lxc.stop(req.params.name, function(data){
if(data){ if(data){
res.json({status: 500, name: req.params.name, message: message}); res.json({status: 500, name: req.params.name, message: data});
}else{ }else{
res.json({status: 200}); res.json({status: 200});
} }