Refactored utilities.

This commit is contained in:
Sean Li 2014-08-31 21:07:22 -07:00
parent eb46a9dee4
commit b3cc727dbb
13 changed files with 36 additions and 77 deletions

View File

@ -163,8 +163,8 @@
// Server and Client // Server and Client
"Docker": true, "Docker": true,
"Util": true,
"boot2dockerexec": true, "boot2dockerexec": true,
"getBinDir": true,
"getBoot2DockerIp": true, "getBoot2DockerIp": true,
"getBoot2DockerState": true, "getBoot2DockerState": true,
"getBoot2DockerDiskUsage": true, "getBoot2DockerDiskUsage": true,
@ -172,7 +172,6 @@
"getBoot2DockerInfo": true, "getBoot2DockerInfo": true,
"boot2DockerVMExists": true, "boot2DockerVMExists": true,
"eraseBoot2DockerVMFiles": true, "eraseBoot2DockerVMFiles": true,
"getHomePath": true,
"initBoot2Docker": true, "initBoot2Docker": true,
"isVirtualBoxInstalled": true, "isVirtualBoxInstalled": true,
"upgradeBoot2Docker": true, "upgradeBoot2Docker": true,
@ -200,8 +199,6 @@
"recoverApps": true, "recoverApps": true,
"restartApp": true, "restartApp": true,
"deleteApp": true, "deleteApp": true,
"deleteFolder": true,
"copyVolumes": true,
"getAppLogs": true, "getAppLogs": true,
"hasDockerfile": true, "hasDockerfile": true,
"createTarFile": true, "createTarFile": true,
@ -224,7 +221,6 @@
"saveImageFolderSync": true, "saveImageFolderSync": true,
"rebuildImageSync": true, "rebuildImageSync": true,
"saveImageFolder": true, "saveImageFolder": true,
"copyFolder": true,
// Forms // Forms
"showFormErrors": true, "showFormErrors": true,

View File

@ -2,7 +2,7 @@ var exec = require('exec');
var path = require('path'); var path = require('path');
boot2dockerexec = function (command, callback) { boot2dockerexec = function (command, callback) {
exec(path.join(getBinDir(), 'boot2docker') + ' ' + command, function(err, stdout) { exec(path.join(Util.getBinDir(), 'boot2docker') + ' ' + command, function(err, stdout) {
callback(err, stdout); callback(err, stdout);
}); });
}; };
@ -131,7 +131,7 @@ boot2DockerVMExists = function (callback) {
}; };
eraseBoot2DockerVMFiles = function (callback) { eraseBoot2DockerVMFiles = function (callback) {
var VMFileLocation = path.join(getHomePath(), 'VirtualBox\\ VMs/boot2docker-vm'); var VMFileLocation = path.join(Util.getHomePath(), 'VirtualBox\\ VMs/boot2docker-vm');
exec('rm -rf ' + VMFileLocation, function (err) { exec('rm -rf ' + VMFileLocation, function (err) {
callback(err); callback(err);
}); });
@ -174,7 +174,7 @@ upgradeBoot2Docker = function (callback) {
}; };
installBoot2DockerAddons = function (callback) { installBoot2DockerAddons = function (callback) {
exec('/bin/cat ' + path.join(getBinDir(), 'kite-binaries.tar.gz') + ' | ' + path.join(getBinDir(), 'boot2docker') + ' ssh "tar zx -C /usr/local/bin"', function (err, stdout) { exec('/bin/cat ' + path.join(Util.getBinDir(), 'kite-binaries.tar.gz') + ' | ' + path.join(Util.getBinDir(), 'boot2docker') + ' ssh "tar zx -C /usr/local/bin"', function (err, stdout) {
console.log(stdout); console.log(stdout);
callback(err); callback(err);
}); });

View File

@ -0,0 +1,2 @@
path = require('path');
fs = require('fs');

View File

@ -15,7 +15,7 @@ removeAppWatcher = function (id) {
addAppWatcher = function (app) { addAppWatcher = function (app) {
removeAppWatcher(app._id); removeAppWatcher(app._id);
var appPath = path.join(path.join(getHomePath(), 'Kitematic'), app.name); var appPath = path.join(path.join(Util.getHomePath(), 'Kitematic'), app.name);
var vmDir = path.join('/var/lib/docker/binds', app.name); var vmDir = path.join('/var/lib/docker/binds', app.name);
var vmPath = 'ssh://docker@localhost:2022/' + vmDir; var vmPath = 'ssh://docker@localhost:2022/' + vmDir;
var watcher = chokidar.watch(appPath, {ignored: /.*\.DS_Store/}); var watcher = chokidar.watch(appPath, {ignored: /.*\.DS_Store/});
@ -30,7 +30,7 @@ addAppWatcher = function (app) {
syncing = true; syncing = true;
var errorPattern = /The\sfile\s(.*)\son\shost/g; var errorPattern = /The\sfile\s(.*)\son\shost/g;
var archiveErrorPattern = /Archive\s(.*)\son\shost\s.*\sshould\sbe\sDELETED/g; var archiveErrorPattern = /Archive\s(.*)\son\shost\s.*\sshould\sbe\sDELETED/g;
var cmd = path.join(getBinDir(), 'unison'); var cmd = path.join(Util.getBinDir(), 'unison');
var args = [ var args = [
cmd, cmd,
vmPath, vmPath,
@ -46,7 +46,7 @@ addAppWatcher = function (app) {
'Name\ {*.tmp,*.unison,*.swp,*.pyc,.DS_Store}', 'Name\ {*.tmp,*.unison,*.swp,*.pyc,.DS_Store}',
'-auto', '-auto',
'-sshargs', '-sshargs',
'-o\ UserKnownHostsFile=/dev/null\ -o\ StrictHostKeyChecking=no\ -o PreferredAuthentications=publickey\ -i\ ' + path.join(getHomePath(), '.ssh/id_boot2docker') '-o\ UserKnownHostsFile=/dev/null\ -o\ StrictHostKeyChecking=no\ -o PreferredAuthentications=publickey\ -i\ ' + path.join(Util.getHomePath(), '.ssh/id_boot2docker')
]; ];
if (!fs.existsSync(appPath)) { if (!fs.existsSync(appPath)) {
@ -70,7 +70,7 @@ addAppWatcher = function (app) {
if (err.indexOf('The archive file is missing on some hosts') !== -1) { if (err.indexOf('The archive file is missing on some hosts') !== -1) {
var results = archiveErrorPattern.exec(err); var results = archiveErrorPattern.exec(err);
var location = results[1].replace(' ', '\\ '); var location = results[1].replace(' ', '\\ ');
var fullLocation = path.join(getHomePath(), 'Library/Application\\ Support/Unison', location); var fullLocation = path.join(Util.getHomePath(), 'Library/Application\\ Support/Unison', location);
var cmd = '/bin/rm -rf ' + fullLocation; var cmd = '/bin/rm -rf ' + fullLocation;
exec(cmd, function () {}); exec(cmd, function () {});
} }
@ -118,4 +118,4 @@ resolveWatchers = function (callback) {
}); });
callback(); callback();
}; };

View File

@ -1,17 +1,3 @@
var path = require('path');
getBinDir = function () {
if (process.env.NODE_ENV === 'development') {
return path.join(path.join(process.env.PWD, '..'), 'resources');
} else {
return path.join(process.cwd(), 'resources');
}
};
getHomePath = function () {
return process.env[(process.platform === 'win32') ? 'USERPROFILE' : 'HOME'];
};
showFormErrors = function ($form, errors) { showFormErrors = function ($form, errors) {
for (var name in errors) { for (var name in errors) {
if (errors.hasOwnProperty(name)) { if (errors.hasOwnProperty(name)) {
@ -31,7 +17,7 @@ clearFormErrors = function ($form) {
$form.find('.form-group.has-error .help-block.error').remove(); $form.find('.form-group.has-error .help-block.error').remove();
$form.find('.form-group.has-error').removeClass('has-error'); $form.find('.form-group.has-error').removeClass('has-error');
}; };
resetForm = function ($form) { resetForm = function ($form) {
$form.find('input').val(''); $form.find('input').val('');
}; };
@ -41,4 +27,4 @@ trackLink = function (trackLabel) {
console.log(trackLabel); console.log(trackLabel);
ga('send', 'event', 'link', 'click', trackLabel); ga('send', 'event', 'link', 'click', trackLabel);
} }
}; };

View File

@ -25,8 +25,8 @@ isResolverSetup = function (callback) {
}; };
setupResolver = function (callback) { setupResolver = function (callback) {
var installFile = path.join(getBinDir(), 'install'); var installFile = path.join(Util.getBinDir(), 'install');
var cocoaSudo = path.join(getBinDir(), 'cocoasudo'); var cocoaSudo = path.join(Util.getBinDir(), 'cocoasudo');
var execCommand = cocoaSudo + ' --prompt="Kitematic Setup wants to make changes. Type your password to allow this." ' + installFile; var execCommand = cocoaSudo + ' --prompt="Kitematic Setup wants to make changes. Type your password to allow this." ' + installFile;
child_process.exec(execCommand, function (error, stdout, stderr) { child_process.exec(execCommand, function (error, stdout, stderr) {
console.log(stdout); console.log(stdout);
@ -41,7 +41,7 @@ setupResolver = function (callback) {
}; };
setupVirtualBox = function (callback) { setupVirtualBox = function (callback) {
child_process.exec('open -W ' + path.join(getBinDir(), 'virtualbox-4.3.12.pkg'), function (error, stdout, stderr) { child_process.exec('open -W ' + path.join(Util.getBinDir(), 'virtualbox-4.3.12.pkg'), function (error, stdout, stderr) {
console.log(stdout); console.log(stdout);
if (error) { if (error) {
console.log(error); console.log(error);
@ -52,4 +52,3 @@ setupVirtualBox = function (callback) {
callback(); callback();
}); });
}; };

View File

@ -21,8 +21,8 @@ Template.dashboard_single_app.events({
}, },
'click .btn-terminal': function () { 'click .btn-terminal': function () {
var app = this; var app = this;
var cmd = path.join(getBinDir(), 'boot2docker') + ' ssh -t "sudo docker-enter ' + app.docker.Id + '"'; var cmd = path.join(Util.getBinDir(), 'boot2docker') + ' ssh -t "sudo docker-enter ' + app.docker.Id + '"';
var terminalCmd = path.join(getBinDir(), 'terminal') + ' ' + cmd; var terminalCmd = path.join(Util.getBinDir(), 'terminal') + ' ' + cmd;
var exec = require('child_process').exec; var exec = require('child_process').exec;
console.log(terminalCmd); console.log(terminalCmd);
exec(terminalCmd, function (err, stdout) { exec(terminalCmd, function (err, stdout) {

View File

@ -126,7 +126,7 @@ Apps.after.insert(function (userId, app) {
} }
}); });
var image = Images.findOne(app.imageId); var image = Images.findOne(app.imageId);
copyVolumes(image.path, app.name); Util.copyVolumes(image.path, app.name);
app = Apps.findOne(appId); app = Apps.findOne(appId);
removeBindFolder(app.name, function (err) { removeBindFolder(app.name, function (err) {
if (err) { if (err) {
@ -144,7 +144,7 @@ Apps.after.remove(function (userId, app) {
deleteApp(app, function (err) { deleteApp(app, function (err) {
if (err) { console.error(err); } if (err) { console.error(err); }
var appPath = path.join(KITE_PATH, app.name); var appPath = path.join(KITE_PATH, app.name);
deleteFolder(appPath); Util.deleteFolder(appPath);
removeBindFolder(app.name, function () { removeBindFolder(app.name, function () {
console.log('Deleted Kite ' + app.name + ' directory.'); console.log('Deleted Kite ' + app.name + ' directory.');
}); });

View File

@ -1,8 +1,10 @@
getHomePath = function () { Util = {};
Util.getHomePath = function () {
return process.env[(process.platform === 'win32') ? 'USERPROFILE' : 'HOME']; return process.env[(process.platform === 'win32') ? 'USERPROFILE' : 'HOME'];
}; };
getBinDir = function () { Util.getBinDir = function () {
if (process.env.NODE_ENV === 'development') { if (process.env.NODE_ENV === 'development') {
return path.join(path.join(process.env.PWD, '..'), 'resources'); return path.join(path.join(process.env.PWD, '..'), 'resources');
} else { } else {
@ -10,13 +12,13 @@ getBinDir = function () {
} }
}; };
deleteFolder = function (directory) { Util.deleteFolder = function (directory) {
if (fs.existsSync(directory)) { if (fs.existsSync(directory)) {
fs.readdirSync(directory).forEach(function (file) { fs.readdirSync(directory).forEach(function (file) {
var curDirectory = directory + '/' + file; var curDirectory = directory + '/' + file;
if (fs.lstatSync(curDirectory).isDirectory()) { if (fs.lstatSync(curDirectory).isDirectory()) {
// Recurse // Recurse
deleteFolder(curDirectory); Util.deleteFolder(curDirectory);
} else { } else {
// Delete File // Delete File
try { try {
@ -30,7 +32,7 @@ deleteFolder = function (directory) {
} }
}; };
copyFolder = function (src, dest) { Util.copyFolder = function (src, dest) {
var exists = fs.existsSync(src); var exists = fs.existsSync(src);
var stats = exists && fs.statSync(src); var stats = exists && fs.statSync(src);
var isDirectory = exists && stats.isDirectory(); var isDirectory = exists && stats.isDirectory();
@ -41,7 +43,7 @@ copyFolder = function (src, dest) {
console.error(e); console.error(e);
} }
fs.readdirSync(src).forEach(function (childItemName) { fs.readdirSync(src).forEach(function (childItemName) {
copyFolder(path.join(src, childItemName), path.join(dest, childItemName)); Util.copyFolder(path.join(src, childItemName), path.join(dest, childItemName));
}); });
} else { } else {
try { try {
@ -52,37 +54,11 @@ copyFolder = function (src, dest) {
} }
}; };
getImageJSON = function (directory) { Util.copyVolumes = function (directory, appName) {
var KITE_JSON_PATH = path.join(directory, 'image.json');
if (fs.existsSync(KITE_JSON_PATH)) {
var data = fs.readFileSync(KITE_JSON_PATH, 'utf8');
return JSON.parse(data);
} else {
return null;
}
};
copyVolumes = function (directory, appName) {
var KITE_VOLUMES_PATH = path.join(directory, 'volumes'); var KITE_VOLUMES_PATH = path.join(directory, 'volumes');
if (fs.existsSync(KITE_VOLUMES_PATH)) { if (fs.existsSync(KITE_VOLUMES_PATH)) {
var destinationPath = path.join(KITE_PATH, appName); var destinationPath = path.join(KITE_PATH, appName);
copyFolder(KITE_VOLUMES_PATH, destinationPath); Util.copyFolder(KITE_VOLUMES_PATH, destinationPath);
console.log('Copied volumes for: ' + appName); console.log('Copied volumes for: ' + appName);
} }
}; };
saveImageFolder = function (directory, imageId, callback) {
var destinationPath = path.join(KITE_IMAGES_PATH, imageId);
if (!fs.existsSync(destinationPath)) {
fs.mkdirSync(destinationPath, function (err) {
if (err) { callback(err); return; }
});
copyFolder(directory, destinationPath);
console.log('Copied image folder for: ' + imageId);
callback(null);
}
};
saveImageFolderSync = function (directory, imageId) {
return Meteor._wrapAsync(saveImageFolder)(directory, imageId);
};

View File

@ -1,5 +1,5 @@
removeBindFolder = function (name, callback) { removeBindFolder = function (name, callback) {
exec(path.join(getBinDir(), 'boot2docker') + ' ssh "sudo rm -rf /var/lib/docker/binds/' + name + '"', function(err, stdout) { exec(path.join(Util.getBinDir(), 'boot2docker') + ' ssh "sudo rm -rf /var/lib/docker/binds/' + name + '"', function(err, stdout) {
callback(err, stdout); callback(err, stdout);
}); });
}; };

View File

@ -1,4 +1,4 @@
KITE_PATH = path.join(getHomePath(), 'Kitematic'); KITE_PATH = path.join(Util.getHomePath(), 'Kitematic');
KITE_TAR_PATH = path.join(KITE_PATH, '.tar'); KITE_TAR_PATH = path.join(KITE_PATH, '.tar');
KITE_IMAGES_PATH = path.join(KITE_PATH, '.images'); KITE_IMAGES_PATH = path.join(KITE_PATH, '.images');

View File

@ -306,7 +306,7 @@ resolveDefaultImages = function () {
image.inspect(function (err) { image.inspect(function (err) {
if (err) { if (err) {
if (err.reason === 'no such image') { if (err.reason === 'no such image') {
docker.loadImage(path.join(getBinDir(), 'base-images.tar.gz'), {}, function (err) { docker.loadImage(path.join(Util.getBinDir(), 'base-images.tar.gz'), {}, function (err) {
if (err) { if (err) {
innerCallback(err); innerCallback(err);
return; return;
@ -393,7 +393,7 @@ reloadDefaultContainers = function (callback) {
return; return;
} }
console.log('Loading new Kitematic default images.'); console.log('Loading new Kitematic default images.');
docker.loadImage(path.join(getBinDir(), 'base-images.tar.gz'), {}, function (err) { docker.loadImage(path.join(Util.getBinDir(), 'base-images.tar.gz'), {}, function (err) {
if (err) { if (err) {
callback(err); callback(err);
return; return;

View File

@ -13,7 +13,7 @@ getImageMetaData = function (directory) {
}; };
rebuildImage = function (image, callback) { rebuildImage = function (image, callback) {
deleteFolder(image.path); Util.deleteFolder(image.path);
var imageMetaData = getImageMetaData(image.originPath); var imageMetaData = getImageMetaData(image.originPath);
if (imageMetaData.logo) { if (imageMetaData.logo) {
Images.update(image._id, { Images.update(image._id, {
@ -141,7 +141,7 @@ Meteor.methods({
console.log('here'); console.log('here');
try { try {
deleteImageSync(image); deleteImageSync(image);
deleteFolder(image.path); Util.deleteFolder(image.path);
} catch (e) { } catch (e) {
console.log(e); console.log(e);
} finally { } finally {