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

View File

@ -2,7 +2,7 @@ var exec = require('exec');
var path = require('path');
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);
});
};
@ -131,7 +131,7 @@ boot2DockerVMExists = 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) {
callback(err);
});
@ -174,7 +174,7 @@ upgradeBoot2Docker = 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);
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) {
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 vmPath = 'ssh://docker@localhost:2022/' + vmDir;
var watcher = chokidar.watch(appPath, {ignored: /.*\.DS_Store/});
@ -30,7 +30,7 @@ addAppWatcher = function (app) {
syncing = true;
var errorPattern = /The\sfile\s(.*)\son\shost/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 = [
cmd,
vmPath,
@ -46,7 +46,7 @@ addAppWatcher = function (app) {
'Name\ {*.tmp,*.unison,*.swp,*.pyc,.DS_Store}',
'-auto',
'-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)) {
@ -70,7 +70,7 @@ addAppWatcher = function (app) {
if (err.indexOf('The archive file is missing on some hosts') !== -1) {
var results = archiveErrorPattern.exec(err);
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;
exec(cmd, function () {});
}

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) {
for (var name in errors) {
if (errors.hasOwnProperty(name)) {

View File

@ -25,8 +25,8 @@ isResolverSetup = function (callback) {
};
setupResolver = function (callback) {
var installFile = path.join(getBinDir(), 'install');
var cocoaSudo = path.join(getBinDir(), 'cocoasudo');
var installFile = path.join(Util.getBinDir(), 'install');
var cocoaSudo = path.join(Util.getBinDir(), 'cocoasudo');
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) {
console.log(stdout);
@ -41,7 +41,7 @@ setupResolver = 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);
if (error) {
console.log(error);
@ -52,4 +52,3 @@ setupVirtualBox = function (callback) {
callback();
});
};

View File

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

View File

@ -126,7 +126,7 @@ Apps.after.insert(function (userId, app) {
}
});
var image = Images.findOne(app.imageId);
copyVolumes(image.path, app.name);
Util.copyVolumes(image.path, app.name);
app = Apps.findOne(appId);
removeBindFolder(app.name, function (err) {
if (err) {
@ -144,7 +144,7 @@ Apps.after.remove(function (userId, app) {
deleteApp(app, function (err) {
if (err) { console.error(err); }
var appPath = path.join(KITE_PATH, app.name);
deleteFolder(appPath);
Util.deleteFolder(appPath);
removeBindFolder(app.name, function () {
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'];
};
getBinDir = function () {
Util.getBinDir = function () {
if (process.env.NODE_ENV === 'development') {
return path.join(path.join(process.env.PWD, '..'), 'resources');
} else {
@ -10,13 +12,13 @@ getBinDir = function () {
}
};
deleteFolder = function (directory) {
Util.deleteFolder = function (directory) {
if (fs.existsSync(directory)) {
fs.readdirSync(directory).forEach(function (file) {
var curDirectory = directory + '/' + file;
if (fs.lstatSync(curDirectory).isDirectory()) {
// Recurse
deleteFolder(curDirectory);
Util.deleteFolder(curDirectory);
} else {
// Delete File
try {
@ -30,7 +32,7 @@ deleteFolder = function (directory) {
}
};
copyFolder = function (src, dest) {
Util.copyFolder = function (src, dest) {
var exists = fs.existsSync(src);
var stats = exists && fs.statSync(src);
var isDirectory = exists && stats.isDirectory();
@ -41,7 +43,7 @@ copyFolder = function (src, dest) {
console.error(e);
}
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 {
try {
@ -52,37 +54,11 @@ copyFolder = function (src, dest) {
}
};
getImageJSON = function (directory) {
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) {
Util.copyVolumes = function (directory, appName) {
var KITE_VOLUMES_PATH = path.join(directory, 'volumes');
if (fs.existsSync(KITE_VOLUMES_PATH)) {
var destinationPath = path.join(KITE_PATH, appName);
copyFolder(KITE_VOLUMES_PATH, destinationPath);
Util.copyFolder(KITE_VOLUMES_PATH, destinationPath);
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) {
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);
});
};

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_IMAGES_PATH = path.join(KITE_PATH, '.images');

View File

@ -306,7 +306,7 @@ resolveDefaultImages = function () {
image.inspect(function (err) {
if (err) {
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) {
innerCallback(err);
return;
@ -393,7 +393,7 @@ reloadDefaultContainers = function (callback) {
return;
}
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) {
callback(err);
return;

View File

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