diff --git a/app.js b/app.js index 83fefb3..5555393 100644 --- a/app.js +++ b/app.js @@ -4,10 +4,6 @@ var favicon = require('serve-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); - -var routes = require('./routes/index'); -var users = require('./routes/users'); - var app = express(); // view engine setup @@ -22,8 +18,8 @@ app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); -app.use('/', users); -app.use('/api', routes); +app.use('/', require('./routes/index')); +app.use('/api', require('./routes/api')); // catch 404 and forward to error handler app.use(function(req, res, next) { diff --git a/lxc.js b/lxc.js index b8d524b..59c70d3 100644 --- a/lxc.js +++ b/lxc.js @@ -1,3 +1,5 @@ +'use strict'; + module.exports = function(config){ var obj = {}; var cmd = require('node-cmd'); @@ -11,8 +13,8 @@ module.exports = function(config){ sysExec('lxc-create -n '+name+' -t '+template, cbComplete); }; - obj.clone = function(name, base_name, cbComplete, cbData){ - sysExec('lxc-clone -o '+base_name+ ' -n '+name +' -B overlayfs -s', cbComplete, cbData); + obj.clone = function(name, base_name, callback){ + sysExec('lxc-clone -o '+base_name+ ' -n '+name +' -B overlayfs -s', callback); }; obj.destroy = function(name, callback){ diff --git a/routes/api.js b/routes/api.js new file mode 100644 index 0000000..1236a40 --- /dev/null +++ b/routes/api.js @@ -0,0 +1,81 @@ +'use strict'; + +var express = require('express'); +var router = express.Router(); +var extend = require('node.extend'); +var redis = require("redis"); +var client = redis.createClient(); +var lxc = require('../lxc')(); +//lxc.startEphemeral('ubuntu_template', 'ue0', function(){console.log('cb1', arguments)}, function(){console.log('cb2', arguments)}) +router.get('/start/:name', function(req, res, next){ + lxc.start(req.params.name, function(status, message){ + if(status){ + res.json({status: 500, name: req.params.name, message: message}); + }else{ + setTimeout(function() { + lxc.info(req.params.name, null, function(data){ + var domain = req.query.domain || 'vm42.us'; + domain = req.params.name+'.'+domain; + client.SADD("hosts", domain, function(){}); + + var ip = data.ip + ':5000'; + client.HSET(domain, "ip", ip, redis.print); + client.HSET(domain, "updated", (new Date).getTime(), redis.print); + client.hset(domain, "include", "proxy.include"); + res.json({status: 200, info: data}); + }); + }, 5000); + + } + }); +}); + +router.get('/live/:template/:name', function(req, res, next){ + lxc.startEphemeral(req.params.name, req.params.template, function (data) { + res.json(data); + }); +}); + +router.get('/stop/:name', function(req, res, next){ + lxc.stop(req.params.name, function(data, message){ + if(data){ + res.json({status: 500, name: req.params.name, message: message}); + }else{ + res.json({status: 200}); + } + }); +}); + +router.get('/clone/:template/:name', function(req, res, next){ + lxc.clone(req.params.name, req.params.template, function(data){ + if( data.match(/Created container/) ){ + res.json({status: 200}); + }else{ + res.json({status: 500, message: data}); + } + }); +}); + +router.get('/destroy/:name', function(req, res, next){ + lxc.destroy(req.params.name, function(data){ + if(data){ + res.json({status: 500, message: data}); + }else{ + res.json({status: 200}); + } + }); +}); + +router.get('/info/:name', function(req, res, next){ + lxc.info(req.params.name, function(data){ + res.json(data); + }); +}); + +router.get('/list', function(req, res, next) { + lxc.list(function(data){ + res.json(data); + }); +}); + +module.exports = router; diff --git a/routes/index.js b/routes/index.js index 4769599..d30f494 100644 --- a/routes/index.js +++ b/routes/index.js @@ -1,80 +1,9 @@ var express = require('express'); var router = express.Router(); -var extend = require('node.extend'); -var redis = require("redis"); -var client = redis.createClient(); -var lxc = require('../lxc')({sshBind: false/*['/usr/bin/ssh', 'virt@127.0.0.1']*/}); -//lxc.startEphemeral('ubuntu_template', 'ue0', function(){console.log('cb1', arguments)}, function(){console.log('cb2', arguments)}) -router.get('/start/:name', function(req, res, next){ - lxc.start(req.params.name, function(status, message){ - if(status){ - res.json({status: 500, name: req.params.name, message: message}); - }else{ - setTimeout(function() { - lxc.info(req.params.name, null, function(data){ - var domain = req.query.domain || 'vm42.us'; - domain = req.params.name+'.'+domain; - client.SADD("hosts", domain, function(){}); - - var ip = data.ip + ':5000'; - client.HSET(domain, "ip", ip, redis.print); - client.HSET(domain, "updated", (new Date).getTime(), redis.print); - client.hset(domain, "include", "proxy.include"); - res.json({status: 200, info: data}); - }); - }, 5000); - - } - }); -}); - -router.get('/live/:template/:name', function(req, res, next){ - lxc.startEphemeral(req.params.name, req.params.template, function (data) { - res.json(data); - }); -}); - -router.get('/stop/:name', function(req, res, next){ - lxc.stop(req.params.name, function(data, message){ - if(data){ - res.json({status: 500, name: req.params.name, message: message}); - }else{ - res.json({status: 200}); - } - }); -}); - -router.get('/clone/:template/:name', function(req, res, next){ - lxc.clone(req.params.name, req.params.template, function(message){ - if( message.match(/Created container/) ){ - res.json({status: 200}); - }else{ - res.json({status: 500, message: message}); - } - }); -}); - -router.get('/destroy/:name', function(req, res, next){ - lxc.destroy(req.params.name, function(data){ - if(data){ - res.json({status: 500, message: data}); - }else{ - res.json({status: 200}); - } - }); -}); - -router.get('/info/:name', function(req, res, next){ - lxc.info(req.params.name, function(data){ - res.json(data); - }); -}); - -router.get('/list', function(req, res, next) { - lxc.list(function(data){ - res.json(data); - }); +/* GET users listing. */ +router.get('/', function(req, res, next) { + res.render('index') }); module.exports = router; diff --git a/routes/users.js b/routes/users.js deleted file mode 100644 index d30f494..0000000 --- a/routes/users.js +++ /dev/null @@ -1,9 +0,0 @@ -var express = require('express'); -var router = express.Router(); - -/* GET users listing. */ -router.get('/', function(req, res, next) { - res.render('index') -}); - -module.exports = router;