Интеграция Rocketchat с уведомлением AWX Tower

Я ищу способ, как интегрировать уведомление для Ansible Tower / AWX в Rocket.Chat? Не могу найти подходящий скрипт для интеграции с Rocket.Chat.


person TRW    schedule 17.08.2019    source источник


Ответы (2)


Сначала зайдите в Rocket.Chat в Администрирование > Интеграция, а затем создайте новый входящий веб-хук. Настройте его как хотите (имя, бот, канал и т. д.), включите скрипты и добавьте следующий скрипт:

class Script {
  process_incoming_request({ request }) {
    // UNCOMMENT THE BELOW LINE TO DEBUG IF NEEDED.
    // console.log(request.content);

    let body = request.content.body;

    if (!body) {
      let id = request.content.id;
      let name = request.content.name;
      let url = request.content.url;
      let status = request.content.status;
      let type = request.content.friendly_name;
      let project = request.content.project;
      let playbook = request.content.playbook;
      let hosts = request.content.hosts;
      let created_by = request.content.created_by;
      let started = request.content.started;
      let finished = request.content.finished;
      let traceback = request.content.traceback;
      let inventory = request.content.inventory;
      let credential = request.content.credential;
      let limit = request.content.limit;
      let extra_vars = request.content.extra_vars;


      let message = "";
      message += "AWX "+type+" "+name+" ("+id+") ";
      message += "on project _"+project+"_ ";
      message += "running playbook _"+playbook+"_ ";
      message += "has status *"+status+"*.";
      message += "\n";

      message += type+" was created by _"+created_by+"_ for inventory _"+inventory+"_ ";
      if (limit !== "") {
        message += "with limit _"+limit+"_ ";
      }
      message += " and using the _"+credential+"_ credentials.\n";

      if (Object.keys(hosts).length != 0) {
        message += "Hosts: "+Object.keys(hosts).length+" (ok/changed/skipped/failures)\n";

        for (let [name, host] of Object.entries(hosts)) {
          message += "- "+name+" ("+host.ok+"/"+host.changed+"/"+host.skipped+"/"+host.failures+")";
          if (host.failed === false) {
            message += " is *ok*\n";
          } else {
            message += " has *failed*\n";
          }
        }
      }

      return {
        content: {
          "text": "AWX notification *"+status+"* on "+type+" "+name+" ("+id+")",
          "attachments": [
            {
              "title": type+": "+name+"",
              "title_link": url,
              "text": message,
              "color": "#764FA5"
            }
          ]
        }
      };
    } else {
      return {
        content: {
          text: "AWX notification: " + request.content.body
        }
      };
    }
  }    
}

Сохраните и активируйте вебхук. Теперь вы получаете URL-адрес Webhook от Rocket.Chat. Скопируйте этот URL.

Перейдите к своему экземпляру AWX и создайте новое уведомление типа Webhook и вставьте URL-адрес Webhook из Rocket.Chat. Вы можете протестировать уведомление в AWX.

Сценарий не печатает лишние переменные, потому что они могут содержать пароли и т. д. Но вы увидите отказавшие хосты и дополнительную информацию о задании.

person TRW    schedule 17.08.2019

AWX/Tower имеет возможность отправлять уведомления в Rocket.chat без каких-либо пользовательских скриптов.

В Tower перейдите в «Уведомления» и добавьте новый с типом «Rocket.Chat», затем установите целевой URL-адрес как URL-адрес пустого входящего веб-перехватчика в Rocket.Chat (убедитесь, что он включен вверху).

(Примечание: будьте осторожны с URL-адресом, который Rocket.Chat дает вам для интеграции, мой не дал мне URL-адрес с правильным портом 3000 в URL-адресе, поэтому сначала это не удалось)


Вот что читается в уведомлениях:

Бот — 15:13
Тест уведомлений Tower 1 https://ruupansi01

Бот – 15:15
Обновление проекта № 2 «Тестовый проект» выполнено успешно: https://tower/#/jobs/project/1

person Martin Kempster    schedule 19.08.2019
comment
Да, вы правы, это новое для меня, но мой скрипт также содержит больше информации из WebHook f.e для каждого статуса хоста. Так что вам не нужно заходить в веб-интерфейс AWX. - person TRW; 02.09.2019