Home

Awesome

Notifications Engine

Notifications Engine is a configuration-driven Golang library that provides notifications for cloud-native applications. The project provides integration with dozen of services like Slack, MS Teams, Mattermost, SMTP, Telegram, Netgenie, and the list keeps growing.

<p align="center"> <img width="460" src="https://user-images.githubusercontent.com/426437/115815221-70139a00-a3ab-11eb-8dc9-3e15f6b17804.png"> </p>

Why Use It?

The first class notifications support is often eschewed feature in Kubernetes controllers. This is challenging because notifications are very opinionated by nature. It is hard to predict what kind of events end-users want to be notified about and especially how the notification should look like. Additionally, there are lots of notification services so it is hard to decide which one to support first.The Notifications Engine is trying to tackle both challenges:

Features

Using the engine CRD controller administrators can configure a set of triggers and templates and enable end-users to subscribe to the required triggers by just annotating custom resources they care about.

The example below demonstrates the Argo CD specific configuration:

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-notifications-cm
data:
  trigger.on-sync-status-unknown: |
    - when: app.status.sync.status == 'Unknown'
      send: [app-sync-status]

  template.app-sync-status: |
    message: |
      Application {{.app.metadata.name}} sync is {{.app.status.sync.status}}.
      Application details: {{.context.argocdUrl}}/applications/{{.app.metadata.name}}.

  service.slack: |
    token: $slack-token
---
apiVersion: v1
kind: Secret
metadata:
  name: argocd-notifications-secret
stringData:
  slack-token: <my-slack-token>

The end-user can subscribe to the triggers they are interested in by adding notifications.argoproj.io/subscribe/<trigger>/<service>: <recipients> annotation:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  annotations:
    notifications.argoproj.io/subscribe.on-sync-succeeded.slack: my-channel1;my-channel2

If there is more than one trigger and multiple destinations you can configure the annotation as given below.

notifications.argoproj.io/subscriptions: |
  - trigger: [on-scaling-replica-set, on-rollout-updated, on-rollout-step-completed]
    destinations:
      - service: slack
        recipients: [my-channel-1, my-channel-2]
      - service: email
        recipients: [recipient-1, recipient-2, recipient-3 ]
  - trigger: [on-rollout-aborted, on-analysis-run-failed, on-analysis-run-error]
    destinations:
      - service: slack
        recipients: [my-channel-21, my-channel-22]

Getting Started

Ready to add notifications to your project? Check out sample notifications for cert-manager

Users

Additional Resources