1
0
Fork 0
mirror of https://github.com/mmumshad/ansible-playable.git synced 2025-02-15 04:42:05 +00:00
ansible-playable/server/components/ssh/ssh2_exec.js

81 lines
2.2 KiB
JavaScript
Raw Normal View History

2017-07-20 15:25:31 +00:00
const Client = require('ssh2').Client;
2017-06-07 17:36:44 +00:00
2017-07-20 15:25:31 +00:00
const config = require('../../config/environment');
const logger = require('../logger/logger');
2017-06-07 17:36:44 +00:00
exports.executeCommand = function(command, dataCallback,completeCallback,errorCallback, ansibleEngine, addScriptEndString){
var conn = new Client();
if(!ansibleEngine) ansibleEngine = {};
var connHost = ansibleEngine.ansibleHost || config.scriptEngine.host;
var connUser = ansibleEngine.ansibleHostUser || config.scriptEngine.user;
var connHostPassword = ansibleEngine.ansibleHostPassword || config.scriptEngine.password;
var scriptEngineConfig = {
host: connHost,
port: 22,
username: connUser,
tryKeyboard: true
};
if(connHostPassword){
scriptEngineConfig.password = connHostPassword;
}else{
scriptEngineConfig.privateKey = require('fs').readFileSync(config.scriptEngine.privateKey);
}
conn.on('keyboard-interactive', function(name, instr, lang, prompts, cb) {
cb([connHostPassword]);
});
conn.on('error', function(error) {
2017-07-20 15:25:31 +00:00
logger.error("SSH Connect Error" + error);
errorCallback("SSH Connect Error" + error);
2017-06-07 17:36:44 +00:00
});
conn.on('ready', function() {
2017-07-20 15:25:31 +00:00
logger.info('Client :: ready');
2017-06-07 17:36:44 +00:00
conn.exec(command, function(err, stream) {
var callBackSent = false;
var result_data = "";
var error_data = "";
var error = false;
if (err) {
2017-07-20 15:25:31 +00:00
logger.error("Error=" + err);
errorCallback("Error=" + err);
2017-06-07 17:36:44 +00:00
}
stream.on('close', function(code, signal) {
2017-07-20 15:25:31 +00:00
logger.info('Stream :: close :: code: ' + code + ', signal: ' + signal);
2017-06-07 17:36:44 +00:00
if(addScriptEndString){
result_data += '\nSCRIPT_FINISHED';
dataCallback(result_data);
}
if(code !== 0){
errorCallback(error_data)
}else{
completeCallback(result_data)
}
conn.end();
}).on('data', function(data) {
2017-07-20 15:25:31 +00:00
logger.info('STDOUT: ' + data);
2017-06-07 17:36:44 +00:00
result_data += data;
if(dataCallback){
dataCallback(result_data);
}
}).stderr.on('data', function(data) {
2017-07-20 15:25:31 +00:00
logger.error('STDERR: ' + data);
2017-06-07 17:36:44 +00:00
error_data += data;
error = true;
});
});
}).connect(scriptEngineConfig);
};