| @ -14,6 +14,7 @@ | |||||||
|     "morgan": "~1.6.1", |     "morgan": "~1.6.1", | ||||||
|     "serve-favicon": "~2.3.0", |     "serve-favicon": "~2.3.0", | ||||||
|     "node.extend": "~1.1.5", |     "node.extend": "~1.1.5", | ||||||
|     "redis": "~2.4.2" |     "redis": "~2.4.2", | ||||||
|  |     "request": "~2.69.0" | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | |||||||
| @ -5,6 +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 request = require('request'); | ||||||
| var lxc = require('../lxc'); | var lxc = require('../lxc'); | ||||||
|  |  | ||||||
| router.get('/start/:name', function(req, res, next){ | router.get('/start/:name', function(req, res, next){ | ||||||
| @ -32,55 +33,81 @@ 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) { | 	return lxc.startEphemeral(req.params.name, req.params.template, function (data) { | ||||||
| 		console.log('live', arguments); | 		console.log('live', arguments); | ||||||
| 		res.json(data); | 		return 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){ | 	return lxc.stop(req.params.name, function(data){ | ||||||
| 		console.log('stop', arguments); | 		console.log('stop', arguments); | ||||||
| 		if(data){ | 		if(data){ | ||||||
| 			res.json({status: 500, name: req.params.name, message: data}); | 			return res.json({status: 500, name: req.params.name, message: data}); | ||||||
| 		}else{ | 		}else{ | ||||||
| 			res.json({status: 200}); | 			return res.json({status: 200}); | ||||||
| 		} | 		} | ||||||
| 	}); | 	}); | ||||||
| }); | }); | ||||||
|  |  | ||||||
| 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){ | 	return lxc.clone(req.params.name, req.params.template, function(data){ | ||||||
| 		console.log('clone', arguments); | 		console.log('clone', arguments); | ||||||
| 		if( data.match(/Created container/) ){ | 		if( data.match(/Created container/) ){ | ||||||
| 			res.json({status: 200}); | 			return res.json({status: 200}); | ||||||
| 		}else{ | 		}else{ | ||||||
| 			res.json({status: 500, message: data}); | 			return res.json({status: 500, message: data}); | ||||||
| 		} | 		} | ||||||
| 	}); | 	}); | ||||||
| }); | }); | ||||||
|  |  | ||||||
| router.get('/destroy/:name', function(req, res, next){ | router.get('/destroy/:name', function(req, res, next){ | ||||||
| 	lxc.destroy(req.params.name, function(data){ | 	return lxc.destroy(req.params.name, function(data){ | ||||||
| 		console.log('destroy', arguments); | 		console.log('destroy', arguments); | ||||||
| 		if(data){ | 		if(data){ | ||||||
| 			res.json({status: 500, message: data}); | 			return res.json({status: 500, message: data}); | ||||||
| 		}else{ | 		}else{ | ||||||
| 			res.json({status: 200}); | 			return res.json({status: 200}); | ||||||
| 		} | 		} | ||||||
| 	}); | 	}); | ||||||
| }); | }); | ||||||
|  |  | ||||||
| router.get('/info/:name', function(req, res, next){ | router.get('/info/:name', function(req, res, next){ | ||||||
| 	lxc.info(req.params.name, function(data){ | 	return lxc.info(req.params.name, function(data){ | ||||||
| 		res.json(data); | 		return res.json(data); | ||||||
| 	}); | 	}); | ||||||
| }); | }); | ||||||
|  |  | ||||||
| router.get('/list', function(req, res, next) { | router.get('/list', function(req, res, next) { | ||||||
| 	lxc.list(function(data){ | 	return lxc.list(function(data){ | ||||||
| 		res.json(data); | 		return res.json(data); | ||||||
| 	}); | 	}); | ||||||
| }); | }); | ||||||
|  |  | ||||||
|  | router.post('/run/:ip?', function(req, res, next){ | ||||||
|  |  | ||||||
|  | 	var runner = function(res, req, ip){ | ||||||
|  | 		console.log('runner on', ip,'with body:\n', JSON.stringify(req.body)); | ||||||
|  | 		return request.post({url:'http://'+ip, form: req.body}, function(error, response, body){ | ||||||
|  | 			console.log('request args:', arguments) | ||||||
|  | 			body = JSON.parse(body); | ||||||
|  | 			body['ip'] = ip.replace('10.0.', '') | ||||||
|  | 			return res.json(body) | ||||||
|  | 		}); | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 	if(req.params.ip){ | ||||||
|  | 		var ip = '10.0.'+ req.params.ip; | ||||||
|  | 		return runner(res, req, ip); | ||||||
|  | 	}else{ | ||||||
|  | 		var name = 'u1-'+(Math.random()*100).toString().replace('.',''); | ||||||
|  | 		console.log('new VM', name); | ||||||
|  | 		return lxc.startEphemeral(name, 'u1', function(data){ | ||||||
|  | 			return runner(res, req, data.ip); | ||||||
|  | 		}); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | }); | ||||||
|  |  | ||||||
| module.exports = router; | module.exports = router; | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user