Get startedSign in

Notification Configuration

Configure fine-grain notification routing with CRDs


Plural has the ability to deliver notifications to most common chat solutions, particularly:

  • Slack
  • Teams

We also have roadmapped support for other channels like PagerDuty and OpsGenie. Further you can configure your own notification routing rule sets, directing notifications for specific pipelines, clusters, etc to different channels as needed.

The system has two main constructs, a notification sink and router. Sinks contain all the details needed to connect to an external notification system, and will serve as a pointer to it in routers. Routers link to sinks and can also configure whitelists for the events the router subscribes to alongside filter rules to only deliver for specific subsets of the system (e.g. only deliver service.update events for a specific cluster).

Configure Notification Sinks

The simplest way to configure a notification sink is via the UI. You can simply go to /notifications/sinks in your instance of the Plural Console, then click the Create Sink button in the top right, you should see a wizard like the one below:

Enter an incoming webhook url for Slack or Microsoft Teams, and a name for the sink, and you should be set to start configuring notifications to that system. If you need help finding an icon for Plural as you create the Slack/Teams bot to own the incoming webhook, feel free to use any of our own icons, or just download this one:

Set Up Your first Router

The best way to configure these is using kubernetes CRDs. If you're unfamiliar with our operator, it might be worth checking out our docs here to get an understanding of how it works and how the resources are structured. Once you're ready though, the exact configuration is pretty simple, you will just create two CRDs like below:

kind: NotificationSink
  name: slack
  namespace: infra # can be any namespace you wish of course
  type: SLACK
  name: slack
kind: NotificationRouter
  name: firehose
  namespace: infra
  events: ['*'] # can be any of (service.update pipeline.update pr.create pr.close cluster.create or *)
  # optional filters to control which entities you deliver notifications for
    - clusterRef:
        name: some-cluster
        namespace: infra
    - serviceRef:
        name: some-service
        namespace: infra
    - pipelineRef:
        name: some-pipeline
        namespace: infra
    - regex: pluralsh/.* # currently used only to filter using the repo slug for PR notifications
    - name: slack # notice this points to the sync resource above
      namespace: infra

Once those resources are configured, you should start to see events trickle in to whatever channel you've configured them against.