Я ищу способ, как интегрировать уведомление для Ansible Tower / AWX в Rocket.Chat? Не могу найти подходящий скрипт для интеграции с Rocket.Chat.
Интеграция Rocketchat с уведомлением AWX Tower
Ответы (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.
Сценарий не печатает лишние переменные, потому что они могут содержать пароли и т. д. Но вы увидите отказавшие хосты и дополнительную информацию о задании.
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