docs/meteor/client/views/dashboard/components/modal-create-image.js

85 lines
2.6 KiB
JavaScript
Executable File

var path = require('path');
var fs = require('fs');
var remote = require('remote');
var dialog = remote.require('dialog');
Template.modalCreateImage.rendered = function () {
$('#modal-create-image').bind('hidden.bs.modal', function () {
Router.go('dashboard_images');
});
};
Template.modalCreateImage.events({
'click #btn-pick-directory': function () {
dialog.showOpenDialog({properties: ['openDirectory']}, function (filenames) {
if (!filenames) {
return;
}
var directory = filenames[0];
if (directory) {
$('#picked-directory').html('<strong>' + directory + '<strong>');
if (!Util.hasDockerfile(directory)) {
$('#picked-directory-error').html('Only directories with Dockerfiles are supported now.');
$('#btn-create-image').attr('disabled', 'disabled');
} else {
Session.set('createImagePickedDirectory', directory);
$('#btn-create-image').removeAttr('disabled');
}
} else {
$('#picked-directory').html('');
$('#btn-create-image').attr('disabled', 'disabled');
}
});
},
'click #btn-create-image': function () {
var directory = Session.get('createImagePickedDirectory');
if (!directory) {
return;
}
$('#directory-picker').val('');
$('#picked-directory-error').html('');
$('#picked-directory').html('');
$('#btn-create-image').attr('disabled', 'disabled');
var imageObj = {
status: 'BUILDING',
path: directory,
buildLogs: [],
createdAt: new Date()
};
var imageMetaData = ImageUtil.getMetaData(directory);
imageObj.meta = imageMetaData;
var count = 2;
imageObj.tags = [imageMetaData.name + ':' + imageMetaData.version];
while (Images.findOne({tags: imageObj.tags})) {
imageObj.meta = {
name: imageMetaData.name + '-' + count,
version: imageMetaData.version
};
imageObj.tags = [imageMetaData.name + '-' + count + ':' + imageMetaData.version];
count++;
}
var imageId = Images.insert(imageObj);
$('#modal-create-image').modal('hide');
$('#modal-create-image').on('hidden.bs.modal', function () {
Router.go('dashboard_images_logs', {id: imageId});
});
if (imageObj.meta.logo) {
Images.update(imageId, {
$set: {
logoPath: path.join(directory, imageObj.meta.logo)
}
});
}
var image = Images.findOne(imageId);
ImageUtil.pull(fs.readFileSync(path.join(image.path, 'Dockerfile'), 'utf8'), imageId, function (err) {
if (err) { throw err; }
ImageUtil.build(image, function (err) {
if (err) { console.error(err); }
});
});
}
});