Changing sync to only sync containers that have ports exposed

This commit is contained in:
Jeff Morgan 2014-11-30 12:20:22 -05:00
parent ffaa2bc565
commit 1a956a6504
6 changed files with 95 additions and 88 deletions

View File

@ -66,10 +66,9 @@ AppUtil.stop = function (appId) {
AppUtil.remove = function (appId) { AppUtil.remove = function (appId) {
var app = Apps.findOne(appId); var app = Apps.findOne(appId);
Apps.remove({_id: appId});
if (app.docker) { if (app.docker) {
Docker.removeContainer(app.docker.Id, function (err) { Docker.removeContainer(app.docker.Id, function (err) {
if (err) { console.error(err); } Apps.remove({_id: appId});
var appPath = path.join(Util.KITE_PATH, app.name); var appPath = path.join(Util.KITE_PATH, app.name);
Util.deleteFolder(appPath); Util.deleteFolder(appPath);
}); });
@ -82,7 +81,11 @@ AppUtil.configVar = function (appId, configVars) {
status: 'STARTING' status: 'STARTING'
}}); }});
var app = Apps.findOne({_id: appId}); var app = Apps.findOne({_id: appId});
AppUtil.run(app); AppUtil.run(Apps.findOne(appId), function (err) {
if (err) {
throw err;
}
});
}; };
AppUtil.logs = function (appId) { AppUtil.logs = function (appId) {
@ -137,7 +140,7 @@ AppUtil.sync = function (callback) {
} }
var apps = Apps.find({}).fetch(); var apps = Apps.find({}).fetch();
var dockerIds = _.map(apps, function (app) { var guiIds = _.map(apps, function (app) {
if (app.docker && app.docker.Id) { if (app.docker && app.docker.Id) {
return app.docker.Id; return app.docker.Id;
} }
@ -145,7 +148,7 @@ AppUtil.sync = function (callback) {
var containerIds = _.map(containers, function (container) { var containerIds = _.map(containers, function (container) {
return container.Id; return container.Id;
}); });
var diffApps = _.difference(dockerIds, containerIds); var diffApps = _.difference(guiIds, containerIds);
_.each(diffApps, function (appContainerId) { _.each(diffApps, function (appContainerId) {
var app = Apps.findOne({'docker.Id': appContainerId}); var app = Apps.findOne({'docker.Id': appContainerId});
if (app && app.status !== 'STARTING') { if (app && app.status !== 'STARTING') {
@ -153,14 +156,18 @@ AppUtil.sync = function (callback) {
} }
}); });
var diffContainers = _.reject(containers, function (container) { var diffContainers = _.reject(containers, function (container) {
return _.contains(dockerIds, container.Id); return _.contains(guiIds, container.Id);
}); });
_.each(diffContainers, function (container) { _.each(diffContainers, function (container) {
var appName = container.Name.substring(1); var appName = container.Name.substring(1);
var startingApp = _.find(apps, function (app) { var startingApp = _.find(apps, function (app) {
return app.status === 'STARTING' && app.name === appName; return app.status === 'STARTING' && app.name === appName;
}); });
if (!startingApp && appName !== 'kite-dns') {
if (startingApp || _.isEmpty(container.NetworkSettings.Ports)) {
return;
}
var appPath = path.join(Util.KITE_PATH, appName); var appPath = path.join(Util.KITE_PATH, appName);
if (!fs.existsSync(appPath)) { if (!fs.existsSync(appPath)) {
console.log('Created Kite ' + appName + ' directory.'); console.log('Created Kite ' + appName + ' directory.');
@ -190,9 +197,13 @@ AppUtil.sync = function (callback) {
config: config, config: config,
path: appPath, path: appPath,
logs: [], logs: [],
createdAt: new Date(), createdAt: new Date()
imageId: Images.findOne({'docker.Id': container.Image})._id
}; };
var image = Images.findOne({'docker.Id': container.Image});
if (image) {
appObj.imageId = image._id;
}
if (container.HostConfig.Binds && container.HostConfig.Binds.length) { if (container.HostConfig.Binds && container.HostConfig.Binds.length) {
appObj.volumesEnabled = true; appObj.volumesEnabled = true;
} else { } else {
@ -200,7 +211,6 @@ AppUtil.sync = function (callback) {
} }
console.log(appObj); console.log(appObj);
Apps.insert(appObj); Apps.insert(appObj);
}
}); });
async.each(apps, function (app, callback) { async.each(apps, function (app, callback) {

View File

@ -181,37 +181,24 @@ var convertVolumeObjToArray = function (obj) {
}; };
Docker.getImageData = function (imageId, callback) { Docker.getImageData = function (imageId, callback) {
Docker.client().listImages({all: false}, function (err, images) {
if (err) {
callback(err, null);
} else {
var dockerImage = _.find(images, function (image) {
return image.Id === imageId;
});
var image = Docker.client().getImage(imageId); var image = Docker.client().getImage(imageId);
image.inspect(function (err, data) { image.inspect(function (err, data) {
if (err) { if (err) {
callback(err, null); callback(err, null);
} else { return;
}
if (data.Config && data.Config.Volumes) { if (data.Config && data.Config.Volumes) {
data.Config.Volumes = convertVolumeObjToArray(data.Config.Volumes); data.Config.Volumes = convertVolumeObjToArray(data.Config.Volumes);
} }
if (data.ContainerConfig && data.ContainerConfig.Volumes) { if (data.ContainerConfig && data.ContainerConfig.Volumes) {
data.ContainerConfig.Volumes = convertVolumeObjToArray(data.ContainerConfig.Volumes); data.ContainerConfig.Volumes = convertVolumeObjToArray(data.ContainerConfig.Volumes);
} }
if (!dockerImage) {
callback(null, data); callback(null, data);
} else {
callback(null, _.extend(dockerImage, data));
}
}
});
}
}); });
}; };
Docker.listImages = function (callback) { Docker.listImages = function (opts, callback) {
Docker.client().listImages({all: false}, function (err, images) { Docker.client().listImages(opts, function (err, images) {
if (err) { if (err) {
callback(err, null); callback(err, null);
} else { } else {
@ -221,7 +208,7 @@ Docker.listImages = function (callback) {
if (err) { if (err) {
cb(err, null); cb(err, null);
} else { } else {
cb(null, data); cb(null, _.extend(image, data));
} }
}); });
}; };

View File

@ -171,7 +171,7 @@ ImageUtil.build = function (image, callback) {
buildLogs: [] buildLogs: []
} }
}); });
Docker.client().buildImage(tarFilePath, {t: image.meta.name + ':' + image.meta.version}, function (err, response) { Docker.client().buildImage(tarFilePath, {forcerm: true, t: image.meta.name + ':' + image.meta.version}, function (err, response) {
if (err) { callback(err); return; } if (err) { callback(err); return; }
console.log('Building Docker image...'); console.log('Building Docker image...');
response.setEncoding('utf8'); response.setEncoding('utf8');
@ -240,7 +240,7 @@ ImageUtil.remove = function (imageId) {
}; };
ImageUtil.sync = function (callback) { ImageUtil.sync = function (callback) {
Docker.listImages(function (err, dockerImages) { Docker.listImages({all: 0}, function (err, dockerImages) {
if (err) { if (err) {
callback(err); callback(err);
return; return;
@ -269,24 +269,30 @@ ImageUtil.sync = function (callback) {
return _.contains(kitematicIds, image.Id); return _.contains(kitematicIds, image.Id);
}); });
_.each(diffDockerImages, function (image) { _.each(diffDockerImages, function (image) {
if (!image.RepoTags || _.isEmpty(image.Config.ExposedPorts)) {
return;
}
var meta = {};
var repoTag = _.first(image.RepoTags); var repoTag = _.first(image.RepoTags);
var repoTagTokens = repoTag.split(':'); var repoTagTokens = repoTag.split(':');
var name = repoTagTokens[0]; var name = repoTagTokens[0];
var version = repoTagTokens[1]; var version = repoTagTokens[1];
meta = {
name: name,
version: version
};
var buildingImage = _.find(images, function (image) { var buildingImage = _.find(images, function (image) {
return image.status === 'BUILDING' && image.meta.name === name && image.meta.version === version; return image.status === 'BUILDING' && image.meta.name === name && image.meta.version === version;
}); });
if (!buildingImage && name !== '<none>' && version !== '<none>' && name !== 'kite-dns') { if (!buildingImage) {
var imageObj = { var imageObj = {
status: 'READY', status: 'READY',
docker: image, docker: image,
buildLogs: [], buildLogs: [],
createdAt: new Date(), createdAt: new Date(),
tags: image.RepoTags, tags: image.RepoTags,
meta: { meta: meta
name: name,
version: version
}
}; };
Images.insert(imageObj); Images.insert(imageObj);
} }

View File

@ -49,10 +49,7 @@ Router.map(function () {
if (!settings) { if (!settings) {
Settings.insert({tracking: true}); Settings.insert({tracking: true});
} }
console.log('Starting boot2docker utilization monitor...');
startUpdatingBoot2DockerUtilization(); startUpdatingBoot2DockerUtilization();
console.log('Starting CLI sync...');
startSyncingAppState(); startSyncingAppState();
Router.go('dashboard_apps'); Router.go('dashboard_apps');
} }

View File

@ -101,11 +101,16 @@ startUpdatingBoot2DockerUtilization = function () {
}; };
startSyncingAppState = function () { startSyncingAppState = function () {
try {
ImageUtil.sync(function (err) { ImageUtil.sync(function (err) {
if (err) {console.log(err);} if (err) {throw err;}
AppUtil.sync(function (err) { AppUtil.sync(function (err) {
if (err) {console.log(err);} if (err) {throw err;}
Meteor.setTimeout(startSyncingAppState, 2000); Meteor.setTimeout(startSyncingAppState, 2000);
}); });
}); });
} catch (err) {
console.log(err);
Meteor.setTimeout(startSyncingAppState, 2000);
}
}; };

View File

@ -14,7 +14,9 @@
{{#if hasItem images}} {{#if hasItem images}}
<div class="images line-item-collection"> <div class="images line-item-collection">
{{#each images}} {{#each images}}
{{#if this.tags}}
{{> dashboardSingleImage}} {{> dashboardSingleImage}}
{{/if}}
{{/each}} {{/each}}
</div> </div>
{{else}} {{else}}