From 1249b235104f97048751ac31a9d08244ebd83b0f Mon Sep 17 00:00:00 2001 From: Sean Li Date: Thu, 2 Oct 2014 13:16:38 -0700 Subject: [PATCH] Refactoring and bug fixes. --- meteor/client/lib/apputil.js | 22 +++++++++---------- meteor/client/lib/docker.js | 17 +++++++-------- meteor/client/lib/imageutil.js | 7 +++--- meteor/client/lib/util.js | 39 +++++++++++++++++++++++++--------- 4 files changed, 51 insertions(+), 34 deletions(-) diff --git a/meteor/client/lib/apputil.js b/meteor/client/lib/apputil.js index d25ebc7c0c..50311b4b76 100644 --- a/meteor/client/lib/apputil.js +++ b/meteor/client/lib/apputil.js @@ -33,11 +33,10 @@ AppUtil.restartHelper = function (app) { if (err) { console.error(err); } Docker.getContainerData(app.docker.Id, function (err, data) { if (err) { console.error(err); } - // Use dig to refresh the DNS - exec('/usr/bin/dig ' + app.name + '.kite @172.17.42.1', function(err, stdout, stderr) { - console.log(err); - console.log(stdout); - console.log(stderr); + Util.refreshDNS(app, function (err) { + if (err) { + console.error(err); + } Apps.update(app._id, {$set: { status: 'READY', docker: data @@ -58,11 +57,10 @@ AppUtil.start = function (appId) { if (err) { console.error(err); } Docker.getContainerData(app.docker.Id, function (err, data) { if (err) { console.error(err); } - // Use dig to refresh the DNS - exec('/usr/bin/dig ' + app.name + '.kite @172.17.42.1', function(err, stdout, stderr) { - console.log(err); - console.log(stdout); - console.log(stderr); + Util.refreshDNS(app, function (err) { + if (err) { + console.error(err); + } Apps.update(app._id, {$set: { status: 'READY', docker: data @@ -178,9 +176,9 @@ AppUtil.sync = function () { if (app.docker && app.docker.Id) { Docker.getContainerData(app.docker.Id, function (err, data) { var status = 'STARTING'; - if (data.State.Running) { + if (data && data.State && data.State.Running) { status = 'READY'; - } else { + } else if (data && data.State && !data.State.Running) { status = 'ERROR'; } Apps.update(app._id, { diff --git a/meteor/client/lib/docker.js b/meteor/client/lib/docker.js index ef8bcd79a9..928a2f39c7 100644 --- a/meteor/client/lib/docker.js +++ b/meteor/client/lib/docker.js @@ -84,7 +84,7 @@ Docker.runContainer = function (app, image, callback) { }); console.log(envParam); docker.createContainer({ - Image: image._id.toLowerCase(), + Image: image.docker.Id, Tty: false, Env: envParam, Hostname: app.name, @@ -94,7 +94,7 @@ Docker.runContainer = function (app, image, callback) { console.log('Created container: ' + container.id); // Bind volumes var binds = []; - if (image.docker.Config.Volumes.length > 0) { + if (image.docker.Config.Volumes && image.docker.Config.Volumes.length > 0) { _.each(image.docker.Config.Volumes, function (vol) { binds.push('/var/lib/docker/binds/' + app.name + vol.Path + ':' + vol.Path); }); @@ -106,11 +106,10 @@ Docker.runContainer = function (app, image, callback) { }, function (err) { if (err) { callback(err, null); return; } console.log('Started container: ' + container.id); - // Use dig to refresh the DNS - exec('/usr/bin/dig ' + app.name + '.kite @172.17.42.1', function(err, stdout, stderr) { - console.log(err); - console.log(stdout); - console.log(stderr); + Util.refreshDNS(app, function (err) { + if (err) { + console.error(err); + } callback(null, container); }); }); @@ -170,7 +169,7 @@ var convertVolumeObjToArray = function (obj) { }; Docker.getImageData = function (imageId, callback) { - var image = docker.getImage(imageId.toLowerCase()); + var image = docker.getImage(imageId); image.inspect(function (err, data) { if (err) { callback(err, null); @@ -215,7 +214,7 @@ Docker.listImages = function (callback) { }; Docker.removeImage = function (imageId, callback) { - var image = docker.getImage(imageId.toLowerCase()); + var image = docker.getImage(imageId); image.remove({force: true}, function (err) { if (err) { callback(err); return; } console.log('Deleted image: ' + imageId); diff --git a/meteor/client/lib/imageutil.js b/meteor/client/lib/imageutil.js index 1cd5ac45fe..e7bc233be5 100644 --- a/meteor/client/lib/imageutil.js +++ b/meteor/client/lib/imageutil.js @@ -196,7 +196,7 @@ ImageUtil.build = function (image, callback) { buildLogs: [] } }); - docker.buildImage(tarFilePath, {t: image._id.toLowerCase()}, function (err, response) { + docker.buildImage(tarFilePath, {t: image.meta.name + ':' + image.meta.version}, function (err, response) { if (err) { callback(err); } console.log('Building Docker image...'); response.setEncoding('utf8'); @@ -221,8 +221,9 @@ ImageUtil.build = function (image, callback) { console.error(e); } var imageData = null; - Docker.getImageData(image._id, function (err, data) { + Docker.getImageData(image.meta.name + ':' + image.meta.version, function (err, data) { if (err) { + console.error(err); Images.update(image._id, { $set: { status: 'ERROR' @@ -313,7 +314,7 @@ ImageUtil.sync = function () { _.each(diffImages, function (imageId) { var image = Images.findOne({'docker.Id': imageId}); if (image && image.status !== 'BUILDING') { - ImageUtil.remove(image._id); + //ImageUtil.remove(image._id); } }); var diffDockerImages = _.reject(dockerImages, function (image) { diff --git a/meteor/client/lib/util.js b/meteor/client/lib/util.js index 33eb5a626f..0f1da75816 100755 --- a/meteor/client/lib/util.js +++ b/meteor/client/lib/util.js @@ -4,10 +4,25 @@ var nodeCrypto = require('crypto'); var request = require('request'); var progress = require('request-progress'); var ncp = require('ncp').ncp; +var exec = require('exec'); ncp.limit = 16; Util = {}; +Util.refreshDNS = function (app, callback) { + // Use dig to refresh the DNS + exec('/usr/bin/dig ' + app.name + '.kite @172.17.42.1', function (err, stdout, stderr) { + console.log(err); + console.log(stdout); + console.log(stderr); + if (err) { + callback(err); + } else { + callback(null); + } + }); +}; + Util.getHomePath = function () { return process.env[(process.platform === 'win32') ? 'USERPROFILE' : 'HOME']; }; @@ -56,17 +71,21 @@ Util.copyFolder = function (src, dest, callback) { }; Util.copyVolumes = function (directory, appName, callback) { - var volumesPath = path.join(directory, 'volumes'); - if (fs.existsSync(volumesPath)) { - var destinationPath = path.join(Util.KITE_PATH, appName); - Util.copyFolder(volumesPath, destinationPath, function (err) { - if (err) { - callback(err); - return; - } - console.log('Copied volumes for: ' + appName); + if (directory) { + var volumesPath = path.join(directory, 'volumes'); + if (fs.existsSync(volumesPath)) { + var destinationPath = path.join(Util.KITE_PATH, appName); + Util.copyFolder(volumesPath, destinationPath, function (err) { + if (err) { + callback(err); + return; + } + console.log('Copied volumes for: ' + appName); + callback(null); + }); + } else { callback(null); - }); + } } else { callback(null); }