mirror of https://github.com/docker/docs.git
Can now sync images.
This commit is contained in:
parent
61418d86a9
commit
0002395e7f
|
@ -252,3 +252,88 @@ ImageUtil.build = function (image, callback) {
|
|||
});
|
||||
});
|
||||
};
|
||||
|
||||
ImageUtil.remove = function (imageId) {
|
||||
var image = Images.findOne(imageId);
|
||||
Images.remove({_id: image._id});
|
||||
if (image.docker) {
|
||||
Docker.removeImage(image.docker.Id, function (err) {
|
||||
if (err) { console.error(err); }
|
||||
});
|
||||
}
|
||||
try {
|
||||
Util.deleteFolder(image.path);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
Sync.removeAppWatcher(imageId);
|
||||
};
|
||||
|
||||
ImageUtil.sync = function () {
|
||||
Docker.listImages(function (err, dockerImages) {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
} else {
|
||||
var images = Images.find({}).fetch();
|
||||
_.each(images, function (image) {
|
||||
if (image.docker && image.docker.Id) {
|
||||
Docker.getImageData(image.docker.Id, function (err, data) {
|
||||
Images.update(image._id, {
|
||||
$set: {
|
||||
docker: data,
|
||||
}
|
||||
})
|
||||
});
|
||||
}
|
||||
});
|
||||
var dockerIds = _.map(images, function (image) {
|
||||
if (image.docker && image.docker.Id) {
|
||||
return image.docker.Id;
|
||||
}
|
||||
});
|
||||
console.log('Doc Ids');
|
||||
console.log(dockerIds);
|
||||
var imageIds = _.map(dockerImages, function (image) {
|
||||
return image.Id;
|
||||
});
|
||||
console.log('Host Ids');
|
||||
console.log(imageIds);
|
||||
var diffImages = _.difference(dockerIds, imageIds);
|
||||
console.log('Dangling Ids');
|
||||
console.log(diffImages);
|
||||
_.each(diffImages, function (imageId) {
|
||||
var image = Images.findOne({'docker.Id': imageId});
|
||||
if (image && image.status !== 'BUILDING') {
|
||||
ImageUtil.remove(image._id);
|
||||
}
|
||||
});
|
||||
var diffDockerImages = _.reject(dockerImages, function (image) {
|
||||
return _.contains(dockerIds, image.Id);
|
||||
});
|
||||
console.log('To be added:');
|
||||
console.log(diffDockerImages);
|
||||
_.each(diffDockerImages, function (image) {
|
||||
var repoTag = _.first(image.RepoTags);
|
||||
var repoTagTokens = repoTag.split(':');
|
||||
var name = repoTagTokens[0];
|
||||
var version = repoTagTokens[1];
|
||||
var buildingImage = _.find(images, function (image) {
|
||||
return image.status === 'BUILDING' && image.meta.name === name && image.meta.version === version;
|
||||
});
|
||||
if (!buildingImage) {
|
||||
var imageObj = {
|
||||
status: 'READY',
|
||||
docker: image,
|
||||
buildLogs: [],
|
||||
createdAt: new Date(),
|
||||
meta: {
|
||||
name: name,
|
||||
version: version
|
||||
}
|
||||
};
|
||||
Images.insert(imageObj);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
|
|
@ -164,6 +164,7 @@ Meteor.setInterval(function () {
|
|||
|
||||
Meteor.setInterval(function () {
|
||||
if (!Session.get('installing')) {
|
||||
ImageUtil.sync();
|
||||
AppUtil.sync();
|
||||
}
|
||||
}, 5000);
|
||||
|
|
|
@ -11,21 +11,9 @@ Template.dashboard_images_settings.events({
|
|||
if (index !== 0) {
|
||||
return;
|
||||
}
|
||||
var image = Images.findOne(imageId);
|
||||
var app = Apps.findOne({imageId: imageId});
|
||||
if (!app) {
|
||||
Images.remove({_id: image._id});
|
||||
if (image.docker) {
|
||||
Docker.removeImage(image.docker.Id, function (err) {
|
||||
if (err) { console.error(err); }
|
||||
});
|
||||
}
|
||||
try {
|
||||
Util.deleteFolder(image.path);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
Sync.removeAppWatcher(imageId);
|
||||
ImageUtil.remove(imageId);
|
||||
Router.go('dashboard_images');
|
||||
} else {
|
||||
$('#error-delete-image').html('<small class="error">This image is currently being used by <a href="/apps/' + app.name + '">' + app.name + '</a>.</small>');
|
||||
|
|
Loading…
Reference in New Issue