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 () {
|
Meteor.setInterval(function () {
|
||||||
if (!Session.get('installing')) {
|
if (!Session.get('installing')) {
|
||||||
|
ImageUtil.sync();
|
||||||
AppUtil.sync();
|
AppUtil.sync();
|
||||||
}
|
}
|
||||||
}, 5000);
|
}, 5000);
|
||||||
|
|
|
@ -11,21 +11,9 @@ Template.dashboard_images_settings.events({
|
||||||
if (index !== 0) {
|
if (index !== 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var image = Images.findOne(imageId);
|
|
||||||
var app = Apps.findOne({imageId: imageId});
|
var app = Apps.findOne({imageId: imageId});
|
||||||
if (!app) {
|
if (!app) {
|
||||||
Images.remove({_id: image._id});
|
ImageUtil.remove(imageId);
|
||||||
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);
|
|
||||||
Router.go('dashboard_images');
|
Router.go('dashboard_images');
|
||||||
} else {
|
} else {
|
||||||
$('#error-delete-image').html('<small class="error">This image is currently being used by <a href="/apps/' + app.name + '">' + app.name + '</a>.</small>');
|
$('#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