run-on-ssh
Version:
Run a node.js script on a given ssh server
93 lines (71 loc) • 2.92 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _keys = require('babel-runtime/core-js/object/keys');
var _keys2 = _interopRequireDefault(_keys);
var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
exports.default = runOnSsh;
var _promise = require('promise');
var _promise2 = _interopRequireDefault(_promise);
var _ssh = require('./ssh');
var _ssh2 = _interopRequireDefault(_ssh);
var _readFolder = require('./read-folder');
var _readFolder2 = _interopRequireDefault(_readFolder);
var _copyEntriesToDir = require('./copy-entries-to-dir');
var _copyEntriesToDir2 = _interopRequireDefault(_copyEntriesToDir);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// remote = {host: ipAddress, port: 22, username: 'root', password}
function runOnSsh(_ref) {
var remote = _ref.remote;
var directory = _ref.directory;
var nodeVersion = _ref.nodeVersion;
var debug = _ref.debug;
nodeVersion = nodeVersion || process.version;
function getConnection() {
return new _ssh2.default((0, _extends3.default)({
port: 22,
username: 'root'
}, remote), { debug: debug });
}
var connection = getConnection();
var ready = _promise2.default.all([(0, _readFolder2.default)(directory, nodeVersion), connection.ready]).then(function (_ref2) {
var _ref3 = (0, _slicedToArray3.default)(_ref2, 1);
var dir = _ref3[0];
return connection.exec('cd ~/' + dir.hash).catch(function () {
return (0, _copyEntriesToDir2.default)(connection, dir.entries, '~/' + dir.hash).then(function () {
return connection.exec(['cd ~/' + dir.hash, 'nvm install ' + nodeVersion, 'npm install']);
});
}).then(function () {
return dir.hash;
});
}).finally(function () {
return connection.close();
});
function runCommand(_ref4) {
var env = _ref4.env;
var args = _ref4.args;
env = env || {};
args = args || [];
var envString = (0, _keys2.default)(env).map(function (key) {
return key + '="' + env[key] + '" ';
}).join(' ');
var argsString = args.map(function (arg) {
return ' "' + arg + '"';
}).join('');
return ready.then(function (dirHash) {
var connection = getConnection();
return connection.ready.then(function () {
return connection.exec(['cd ~/' + dirHash, 'nvm use ' + nodeVersion, envString + 'node index.js' + argsString], { debug: typeof debug === 'undefined' ? process.env.NODE_ENV !== 'production' : debug });
}).then(function (stdout) {
return stdout.replace(/^Now using.*\n/, '');
}).finally(function () {
return connection.close();
});
});
}
return runCommand;
}