From 0f6b7746aae005575509157d7f60c724fd275912 Mon Sep 17 00:00:00 2001 From: Sean Li Date: Thu, 9 Oct 2014 11:25:47 -0700 Subject: [PATCH] Fixed bug when image doesn't finish building. --- .gitignore | 2 +- meteor/client/lib/docker.js | 42 +++++++++++++------ meteor/client/lib/imageutil.js | 27 +++++++----- meteor/client/main.js | 4 ++ .../views/dashboard/apps/dashboard-apps.js | 2 +- .../components/modal-create-image.js | 1 + .../dashboard/images/dashboard-images.js | 2 +- .../images/dashboard-single-image.html | 6 ++- .../layouts/dashboard-images-layout.html | 4 +- 9 files changed, 62 insertions(+), 28 deletions(-) diff --git a/.gitignore b/.gitignore index 293db15e3e..9640d95d0f 100644 --- a/.gitignore +++ b/.gitignore @@ -10,7 +10,7 @@ bin # Resources resources/cache -resources/base-images.tar.gz +resources/base-images-*.tar.gz resources/virtualbox-*.pkg resources/boot2docker* resources/node-webkit diff --git a/meteor/client/lib/docker.js b/meteor/client/lib/docker.js index 928a2f39c7..cd3bb0f1a2 100644 --- a/meteor/client/lib/docker.js +++ b/meteor/client/lib/docker.js @@ -169,18 +169,37 @@ var convertVolumeObjToArray = function (obj) { }; Docker.getImageData = function (imageId, callback) { - var image = docker.getImage(imageId); - image.inspect(function (err, data) { + docker.listImages({all: false}, function (err, images) { if (err) { callback(err, null); } else { - if (data.Config && data.Config.Volumes) { - data.Config.Volumes = convertVolumeObjToArray(data.Config.Volumes); - } - if (data.ContainerConfig && data.ContainerConfig.Volumes) { - data.ContainerConfig.Volumes = convertVolumeObjToArray(data.ContainerConfig.Volumes); - } - callback(null, data); + var dockerImage = _.find(images, function (image) { + return image.Id === imageId; + }); + var image = docker.getImage(imageId); + image.inspect(function (err, data) { + if (err) { + callback(err, null); + } else { + if (data.Config && data.Config.Volumes) { + data.Config.Volumes = convertVolumeObjToArray(data.Config.Volumes); + } + if (data.ContainerConfig && data.ContainerConfig.Volumes) { + data.ContainerConfig.Volumes = convertVolumeObjToArray(data.ContainerConfig.Volumes); + } + /*console.log('Image ID'); + console.log(imageId); + console.log('Raw Docker Data:'); + console.log(dockerImage); + console.log('Inspected Data:'); + console.log(data);*/ + if (!dockerImage) { + callback(null, data); + } else { + callback(null, _.extend(dockerImage, data)); + } + } + }); } }); }; @@ -196,8 +215,7 @@ Docker.listImages = function (callback) { if (err) { cb(err, null); } else { - var mergedData = _.extend(image, data); - cb(null, mergedData); + cb(null, data); } }); } @@ -273,7 +291,7 @@ Docker.resolveDefaultImages = function () { image.inspect(function (err) { if (err) { if (err.reason === 'no such image') { - docker.loadImage(path.join(Util.getBinDir(), 'base-images.tar.gz'), {}, function (err) { + docker.loadImage(path.join(Util.getBinDir(), Docker.DEFAULT_IMAGES_FILENAME), {}, function (err) { if (err) { innerCallback(err); return; diff --git a/meteor/client/lib/imageutil.js b/meteor/client/lib/imageutil.js index e7bc233be5..e88a2486bc 100644 --- a/meteor/client/lib/imageutil.js +++ b/meteor/client/lib/imageutil.js @@ -44,9 +44,13 @@ ImageUtil.getMetaData = function (directory) { if (!kiteJSON.name) { kiteJSON.name = _.last(directory.split(path.sep)); } + if (!kiteJSON.version) { + kiteJSON.version = 'latest'; + } } else { kiteJSON = { - name: _.last(directory.split(path.sep)) + name: _.last(directory.split(path.sep)), + version: 'latest' }; } return kiteJSON; @@ -222,6 +226,7 @@ ImageUtil.build = function (image, callback) { } var imageData = null; Docker.getImageData(image.meta.name + ':' + image.meta.version, function (err, data) { + console.log(data); if (err) { console.error(err); Images.update(image._id, { @@ -277,19 +282,19 @@ ImageUtil.sync = function () { } else { var images = Images.find({}).fetch(); _.each(images, function (image) { - if (image.docker && image.docker.Id) { + var image = Images.findOne(image._id); + if (image && image.docker && image.docker.Id) { + var duplicateImages = Images.find({'docker.Id': image.docker.Id, _id: {$ne: image._id}}).fetch(); + _.each(duplicateImages, function (duplicateImage) { + Images.remove(duplicateImage._id); + }); var imageData = _.find(dockerImages, function (dockerImage) { return dockerImage.Id === image.docker.Id; }); if (imageData && imageData.RepoTags) { - var repoTag = _.first(imageData.RepoTags); - var repoTagTokens = repoTag.split(':'); - var name = repoTagTokens[0]; - var version = repoTagTokens[1]; Images.update(image._id, { $set: { - 'meta.name': name, - 'meta.version': version + tags: imageData.RepoTags } }); } @@ -314,7 +319,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) { @@ -328,17 +333,19 @@ ImageUtil.sync = function () { var buildingImage = _.find(images, function (image) { return image.status === 'BUILDING' && image.meta.name === name && image.meta.version === version; }); - if (!buildingImage) { + if (!buildingImage && name !== '' && version !== '') { var imageObj = { status: 'READY', docker: image, buildLogs: [], createdAt: new Date(), + tags: image.RepoTags, meta: { name: name, version: version } }; + console.log(imageObj); Images.insert(imageObj); } }); diff --git a/meteor/client/main.js b/meteor/client/main.js index 351cd56e94..6c376e12af 100755 --- a/meteor/client/main.js +++ b/meteor/client/main.js @@ -67,6 +67,10 @@ Handlebars.registerHelper('isUpdating', function () { return Session.get('isUpdating'); }); +Handlebars.registerHelper('displayTags', function (tags, delimiter) { + return tags.join(delimiter); +}); + var fixBoot2DockerVM = function (callback) { Boot2Docker.check(function (err) { if (err) { diff --git a/meteor/client/views/dashboard/apps/dashboard-apps.js b/meteor/client/views/dashboard/apps/dashboard-apps.js index d0f8dbf2bd..d71c0c7520 100755 --- a/meteor/client/views/dashboard/apps/dashboard-apps.js +++ b/meteor/client/views/dashboard/apps/dashboard-apps.js @@ -1,5 +1,5 @@ Template.dashboard_apps.helpers({ apps: function () { - return Apps.find({name: {$ne: 'kite-dns'}}, {sort: {createdAt: -1}}); + return Apps.find({}, {sort: {createdAt: -1}}); } }); diff --git a/meteor/client/views/dashboard/components/modal-create-image.js b/meteor/client/views/dashboard/components/modal-create-image.js index 410b7810ba..ddfbd4b636 100755 --- a/meteor/client/views/dashboard/components/modal-create-image.js +++ b/meteor/client/views/dashboard/components/modal-create-image.js @@ -49,6 +49,7 @@ Template.modal_create_image.events({ }; var imageMetaData = ImageUtil.getMetaData(directory); imageObj.meta = imageMetaData; + imageObj.tags = [imageMetaData.name + ':' + imageMetaData.version]; var imageId = Images.insert(imageObj); var imagePath = path.join(Util.KITE_IMAGES_PATH, imageId); Images.update(imageId, { diff --git a/meteor/client/views/dashboard/images/dashboard-images.js b/meteor/client/views/dashboard/images/dashboard-images.js index 197829a68b..9edaddcd94 100755 --- a/meteor/client/views/dashboard/images/dashboard-images.js +++ b/meteor/client/views/dashboard/images/dashboard-images.js @@ -1,5 +1,5 @@ Template.dashboard_images.helpers({ images: function () { - return Images.find({'meta.name': {$ne: 'kite-dns'}}, {sort: {createdAt: -1}}); + return Images.find({}, {sort: {createdAt: -1}}); } }); diff --git a/meteor/client/views/dashboard/images/dashboard-single-image.html b/meteor/client/views/dashboard/images/dashboard-single-image.html index b35da3a017..f714320b17 100755 --- a/meteor/client/views/dashboard/images/dashboard-single-image.html +++ b/meteor/client/views/dashboard/images/dashboard-single-image.html @@ -18,7 +18,7 @@ {{/if}} {{/if}} {{/if}} - {{meta.name}}:{{meta.version}} + {{displayTags tags ', '}} {{#if $eq status 'BUILDING'}} Creating image. This may take a couple minutes... {{else}} @@ -33,7 +33,9 @@ {{/if}} {{#if $neq status 'BUILDING'}} - + {{#if originPath}} + + {{/if}} {{/if}} diff --git a/meteor/client/views/dashboard/layouts/dashboard-images-layout.html b/meteor/client/views/dashboard/layouts/dashboard-images-layout.html index bd12904a9e..8489a0cd72 100755 --- a/meteor/client/views/dashboard/layouts/dashboard-images-layout.html +++ b/meteor/client/views/dashboard/layouts/dashboard-images-layout.html @@ -18,7 +18,9 @@ {{/if}} {{#if $neq status 'BUILDING'}} - + {{#if originPath}} + + {{/if}} {{/if}}