64 lines
1.8 KiB
JavaScript
64 lines
1.8 KiB
JavaScript
'use strict';
|
|
|
|
//
|
|
// Watch kubernetes events and send them to a slack channel. This
|
|
// uses Slack's incoming webhooks. To use this, create an incoming
|
|
// webhook for your slack channel through Slack's UI, and populate the
|
|
// relative path below.
|
|
//
|
|
// Create the function in fission:
|
|
//
|
|
// fission fn create --name kubeEventsSlack --env nodejs --code kubeEventsSlack.js
|
|
//
|
|
// Then, watch all services in the default namespace:
|
|
//
|
|
// fission watch create --function kubeEventsSlack --type service --ns default
|
|
//
|
|
|
|
let https = require('https');
|
|
|
|
const path = "YOUR RELATIVE PATH HERE", // Something like "/services/XXX/YYY/zZz123"
|
|
|
|
function upcaseFirst(s) {
|
|
return s.charAt(0).toUpperCase() + s.slice(1).toLowerCase();
|
|
}
|
|
|
|
function sendSlackMessage(msg, cb) {
|
|
let postData = `{"text": "${msg}"}`;
|
|
let options = {
|
|
hostname: "hooks.slack.com",
|
|
path: slackWebhookPath,
|
|
method: "POST",
|
|
headers: {
|
|
"Content-Type": "application/json"
|
|
}
|
|
};
|
|
let req = https.request(options, function(res) {
|
|
console.log(`slack request status = ${res.statusCode}`);
|
|
cb();
|
|
});
|
|
req.write(postData);
|
|
req.end();
|
|
}
|
|
|
|
module.exports = function(context, callback) {
|
|
console.log(context.request.headers);
|
|
|
|
let obj = context.request.body;
|
|
let version = obj.metadata.resourceVersion;
|
|
let eventType = context.request.get('X-Kubernetes-Event-Type');
|
|
let objType = context.request.get('X-Kubernetes-Object-Type');
|
|
|
|
let msg = `${upcaseFirst(eventType)} ${objType} ${obj.metadata.name}`;
|
|
console.log(msg, version);
|
|
|
|
if (eventType == 'DELETED' || eventType == 'ADDED') {
|
|
console.log("sending event to slack")
|
|
sendSlackMessage(msg, function() {
|
|
callback(200, "");
|
|
});
|
|
} else {
|
|
callback(200, "");
|
|
}
|
|
}
|