Moved basic Docker operations to namespace.

This commit is contained in:
Sean Li 2014-08-31 19:18:11 -07:00
parent 8955d6bcda
commit 9d5fa7ad69
2 changed files with 36 additions and 44 deletions

View File

@ -128,7 +128,7 @@
// Packages // Packages
"Fiber": true, "Fiber": true,
"moment": true, "moment": true,
"Docker": true, "Dockerode": true,
"byline": true, "byline": true,
"fs": true, "fs": true,
"zlib": true, "zlib": true,
@ -142,6 +142,7 @@
"chokidar": true, "chokidar": true,
"docker": true, "docker": true,
"async": true, "async": true,
"child_process": true,
// Collections // Collections
"SimpleSchema": false, "SimpleSchema": false,
@ -161,6 +162,7 @@
"SetupController": true, "SetupController": true,
// Server and Client // Server and Client
"Docker": true,
"boot2dockerexec": true, "boot2dockerexec": true,
"getBinDir": true, "getBinDir": true,
"getBoot2DockerIp": true, "getBoot2DockerIp": true,
@ -202,16 +204,8 @@
"loadKiteVolumes": true, "loadKiteVolumes": true,
"getAppLogs": true, "getAppLogs": true,
"hasDockerfile": true, "hasDockerfile": true,
"runContainer": true,
"runContainerSync": true,
"restartContainer": true,
"restartContainerSync": true,
"createTarFile": true, "createTarFile": true,
"createTarFileSync": true, "createTarFileSync": true,
"getImageData": true,
"getImageDataSync": true,
"removeImage": true,
"removeImageSync": true,
"deleteImage": true, "deleteImage": true,
"checkDefaultImages": true, "checkDefaultImages": true,
"resolveDefaultImages": true, "resolveDefaultImages": true,
@ -239,11 +233,7 @@
"FormSchema": true, "FormSchema": true,
"showFormSuccess": true, "showFormSuccess": true,
"resetForm": true, "resetForm": true,
"removeContainer": true,
"removeContainerSync": true,
"deleteAppSync": true, "deleteAppSync": true,
"getContainerData": true,
"getContainerDataSync": true,
// Testing // Testing
"require": false, "require": false,

View File

@ -1,16 +1,18 @@
Docker = Meteor.require('dockerode'); Dockerode = Meteor.require('dockerode');
var Convert = Meteor.require('ansi-to-html'); var Convert = Meteor.require('ansi-to-html');
var convert = new Convert(); var convert = new Convert();
var DOCKER_HOST='192.168.59.103'; var DOCKER_HOST='192.168.59.103';
docker = new Docker({host: '192.168.59.103', port: '2375'}); docker = new Dockerode({host: '192.168.59.103', port: '2375'});
Docker = {};
hasDockerfile = function (directory) { hasDockerfile = function (directory) {
return fs.existsSync(path.join(directory, 'Dockerfile')); return fs.existsSync(path.join(directory, 'Dockerfile'));
}; };
removeContainer = function (containerId, callback) { Docker.removeContainer = function (containerId, callback) {
var container = docker.getContainer(containerId); var container = docker.getContainer(containerId);
container.kill(function (err) { container.kill(function (err) {
if (err) { callback(err); return; } if (err) { callback(err); return; }
@ -22,8 +24,8 @@ removeContainer = function (containerId, callback) {
}); });
}; };
removeContainerSync = function (containerId) { Docker.removeContainerSync = function (containerId) {
return Meteor._wrapAsync(removeContainer)(containerId); return Meteor._wrapAsync(Docker.removeContainer)(containerId);
}; };
deleteApp = function (app, callback) { deleteApp = function (app, callback) {
@ -32,7 +34,7 @@ deleteApp = function (app, callback) {
return; return;
} }
try { try {
removeContainerSync(app.docker.Id); Docker.removeContainerSync(app.docker.Id);
} catch (e) { } catch (e) {
console.error(e); console.error(e);
} }
@ -43,7 +45,7 @@ deleteAppSync = function (app) {
return Meteor._wrapAsync(deleteApp)(app); return Meteor._wrapAsync(deleteApp)(app);
}; };
getContainerData = function (containerId, callback) { Docker.getContainerData = function (containerId, callback) {
var container = docker.getContainer(containerId); var container = docker.getContainer(containerId);
container.inspect(function (err, data) { container.inspect(function (err, data) {
if (err) { if (err) {
@ -59,11 +61,11 @@ getContainerData = function (containerId, callback) {
}); });
}; };
getContainerDataSync = function (containerId) { Docker.getContainerDataSync = function (containerId) {
return Meteor._wrapAsync(getContainerData)(containerId); return Meteor._wrapAsync(Docker.getContainerData)(containerId);
}; };
runContainer = function (app, image, callback) { Docker.runContainer = function (app, image, callback) {
var envParam = []; var envParam = [];
_.each(_.keys(app.config), function (key) { _.each(_.keys(app.config), function (key) {
var builtStr = key + '=' + app.config[key]; var builtStr = key + '=' + app.config[key];
@ -100,11 +102,11 @@ runContainer = function (app, image, callback) {
}); });
}; };
runContainerSync = function (app, image) { Docker.runContainerSync = function (app, image) {
return Meteor._wrapAsync(runContainer)(app, image); return Meteor._wrapAsync(Docker.runContainer)(app, image);
}; };
restartContainer = function (containerId, callback) { Docker.restartContainer = function (containerId, callback) {
var container = docker.getContainer(containerId); var container = docker.getContainer(containerId);
container.restart(function (err) { container.restart(function (err) {
if (err) { if (err) {
@ -117,8 +119,8 @@ restartContainer = function (containerId, callback) {
}); });
}; };
restartContainerSync = function (containerId) { Docker.restartContainerSync = function (containerId) {
return Meteor._wrapAsync(restartContainer)(containerId); return Meteor._wrapAsync(Docker.restartContainer)(containerId);
}; };
var getFromImage = function (dockerfile) { var getFromImage = function (dockerfile) {
@ -135,11 +137,11 @@ var getFromImage = function (dockerfile) {
restartApp = function (app, callback) { restartApp = function (app, callback) {
if (app.docker && app.docker.Id) { if (app.docker && app.docker.Id) {
try { try {
restartContainerSync(app.docker.Id); Docker.restartContainerSync(app.docker.Id);
} catch (e) { } catch (e) {
console.error(e); console.error(e);
} }
var containerData = getContainerDataSync(app.docker.Id); var containerData = Docker.getContainerDataSync(app.docker.Id);
Fiber(function () { Fiber(function () {
Apps.update(app._id, {$set: { Apps.update(app._id, {$set: {
status: 'READY', status: 'READY',
@ -209,7 +211,7 @@ var convertVolumeObjToArray = function (obj) {
return result; return result;
}; };
getImageData = function (imageId, callback) { Docker.getImageData = function (imageId, callback) {
var image = docker.getImage(imageId.toLowerCase()); var image = docker.getImage(imageId.toLowerCase());
image.inspect(function (err, data) { image.inspect(function (err, data) {
if (err) { if (err) {
@ -224,11 +226,11 @@ getImageData = function (imageId, callback) {
}); });
}; };
getImageDataSync = function (imageId) { Docker.getImageDataSync = function (imageId) {
return Meteor._wrapAsync(getImageData)(imageId); return Meteor._wrapAsync(Docker.getImageData)(imageId);
}; };
removeImage = function (imageId, callback) { Docker.removeImage = function (imageId, callback) {
var image = docker.getImage(imageId.toLowerCase()); var image = docker.getImage(imageId.toLowerCase());
image.remove({force: true}, function (err) { image.remove({force: true}, function (err) {
if (err) { callback(err); return; } if (err) { callback(err); return; }
@ -237,8 +239,8 @@ removeImage = function (imageId, callback) {
}); });
}; };
removeImageSync = function (imageId) { Docker.removeImageSync = function (imageId) {
return Meteor._wrapAsync(removeImage)(imageId); return Meteor._wrapAsync(Docker.removeImage)(imageId);
}; };
deleteImage = function (image, callback) { deleteImage = function (image, callback) {
@ -247,7 +249,7 @@ deleteImage = function (image, callback) {
return; return;
} }
try { try {
removeImageSync(image.docker.Id); Docker.removeImageSync(image.docker.Id);
} catch (e) { } catch (e) {
console.error(e); console.error(e);
} }
@ -374,7 +376,7 @@ reloadDefaultContainers = function (callback) {
async.until(function () { async.until(function () {
return ready; return ready;
}, function (callback) { }, function (callback) {
docker.listContainers(function (err, containers) { docker.listContainers(function (err) {
if (!err) { if (!err) {
ready = true; ready = true;
} }
@ -505,7 +507,7 @@ pullImageFromDockerfile = function (dockerfile, imageId, callback) {
console.log('From image: ' + fromImage); console.log('From image: ' + fromImage);
var installedImage = null; var installedImage = null;
try { try {
installedImage = getImageDataSync(fromImage); installedImage = Docker.getImageDataSync(fromImage);
} catch (e) { } catch (e) {
console.error(e); console.error(e);
} }
@ -593,7 +595,7 @@ buildImage = function (image, callback) {
Fiber(function () { Fiber(function () {
var imageData = null; var imageData = null;
try { try {
imageData = getImageDataSync(image._id); imageData = Docker.getImageDataSync(image._id);
Images.update(image._id, { Images.update(image._id, {
$set: { $set: {
docker: imageData, docker: imageData,
@ -614,7 +616,7 @@ buildImage = function (image, callback) {
} }
if (oldImageId && imageData && oldImageId !== imageData.Id) { if (oldImageId && imageData && oldImageId !== imageData.Id) {
try { try {
removeImageSync(oldImageId); Docker.removeImageSync(oldImageId);
} catch (e) { } catch (e) {
console.error(e); console.error(e);
} }
@ -631,11 +633,11 @@ Meteor.methods({
this.unblock(); this.unblock();
var image = Images.findOne({_id: app.imageId}); var image = Images.findOne({_id: app.imageId});
try { try {
removeContainerSync(app.name); Docker.removeContainerSync(app.name);
} catch (e) {} } catch (e) {}
try { try {
var container = runContainerSync(app, image); var container = Docker.runContainerSync(app, image);
var containerData = getContainerDataSync(container.id); var containerData = Docker.getContainerDataSync(container.id);
Meteor.setTimeout(function () { Meteor.setTimeout(function () {
Apps.update(app._id, {$set: { Apps.update(app._id, {$set: {
docker: containerData, docker: containerData,