Как использовать вывод команды npm simple-s sh exe c вне самой команды? - PullRequest
1 голос
/ 06 августа 2020

Я пытаюсь реализовать новую функцию для нашей собственной торговой марки hubot. Эта функция использует пакет npm simple-s sh (оболочка для ssh2) и в основном принимает среду (например, «@hubot get versions DEV») в качестве входных данных, получает серверы и учетные данные для этой среды и запускает ряд bash команд для возврата версии для определенного программного обеспечения на каждом сервере.

Я могу запустить этот штраф и просмотреть вывод при использовании console.log (), но мне нужно добавить в массив, чтобы я мог отправить его обратно в ответе hubot. Однако я не могу добавлять ни строку ответа, ни массив, который я создал из функции out (stdout) после каждого .exe c.

Как я могу использовать стандартный вывод каждой команды в моем ответе с помощью hubot?

require('dotenv').config('../.env');

const SSH = require('simple-ssh');
const { Resolver } = require('../../../utils/Resolver');

const resolver = new Resolver();
let response = '';
let versions = [];

// parses initial request from flowdock into separate environments
function getEnvsFromRequest(reqEnvsStr) {
  return reqEnvsStr.toUpperCase().replace(/AND/, '').replace(/\s+/g, '').split(',');
}

function getVersions(res) {
  const env = getEnvsFromRequest(res.match[2].toString());
  const resEnv = resolver.resolveEnv(env);
  if (resEnv === null) {
    res.reply(`${env} is not in my list of available environments.`);
    return;
  }
  if (resEnv.length > 0) {
    response = response.concat(`\nHere are the results for ${resEnv}:\n`);
    response = response.concat('------------------------\n');
  }
// Resolve hosts for environment
  let resHosts = [];
  resHosts = resolver.resolveHosts(resEnv);
// Resolve creds for environment
  let resCreds = [];
  resCreds = resolver.resolveCreds(resEnv);

// Loop through available hosts for each environment
  resHosts.forEach((resHost) => {
    dummy = [];
    dummy.push(`${resHost}:\n`);
    const ssh = new SSH({
      host: resHost,
      user: resCreds[0],
      pass: resCreds[1],
    });

    ssh
    // Example 1 version
      .exec('head -3 /app/foo/foo/bar | tail -1 | cut -d \'=\' -f 2', {
        // out(stdout) { response.concat(`Foo foo bar version: ${stdout}`); },
        out(stdout) { dummy.push(`Foo foo bar version: ${stdout}`); },
      })
    // Example 2 version
      .exec('cd /app/foo/bar && ls -td -- * | head -n 1', {
        // out(stdout) { response.concat(`Foo bar version: ${stdout}`); },
        out(stdout) { dummy.push(`Foo bar version: ${stdout}`); },
      })
      .start();
  });
  versions.push(dummy)
}
response.concat(versions.toString());
res.reply(response);
...