mirror of
https://github.com/mmumshad/ansible-playable.git
synced 2025-02-15 04:42:05 +00:00
80 lines
2.2 KiB
JavaScript
80 lines
2.2 KiB
JavaScript
const Client = require('ssh2').Client;
|
|
|
|
const config = require('../../config/environment');
|
|
const logger = require('../logger/logger');
|
|
|
|
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) {
|
|
logger.error("SSH Connect Error" + error);
|
|
errorCallback("SSH Connect Error" + error);
|
|
});
|
|
|
|
conn.on('ready', function() {
|
|
logger.info('Client :: ready');
|
|
conn.exec(command, function(err, stream) {
|
|
var callBackSent = false;
|
|
|
|
var result_data = "";
|
|
var error_data = "";
|
|
var error = false;
|
|
|
|
if (err) {
|
|
logger.error("Error=" + err);
|
|
errorCallback("Error=" + err);
|
|
}
|
|
stream.on('close', function(code, signal) {
|
|
logger.info('Stream :: close :: code: ' + code + ', signal: ' + signal);
|
|
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) {
|
|
logger.info('STDOUT: ' + data);
|
|
result_data += data;
|
|
if(dataCallback){
|
|
dataCallback(result_data);
|
|
}
|
|
|
|
}).stderr.on('data', function(data) {
|
|
logger.error('STDERR: ' + data);
|
|
error_data += data;
|
|
error = true;
|
|
|
|
});
|
|
});
|
|
}).connect(scriptEngineConfig);
|
|
};
|
|
|