Co-authored-by: Sunny <github@darkowlzz.space> Signed-off-by: adamkenihan <adam.kenihan@est.tech> |
9 months ago | |
---|---|---|
.. | ||
README.md | 9 months ago | |
user-stories-provider.drawio.png | 11 months ago |
README.md
Flux CDEvents Provider
Status: provisional
Creation date: 2024-01-19
Last update: 2024-06-05
Summary
This RFC proposes to add a Provider
type to the Flux notification-controller API for sending
CDEvents.
When Provider
objects configured to send CDEvents are alerted by a Flux event, they will utilise an already defined
mapping of Flux and CDEvents events to send an appropriate CDEvent payload to a defined URL.
Motivation
CDEvents enables interoperability between supported tools in a workflow, and flux is a very popular continuous delivery tool, as such we have received many questions about implementing CDEvents into the tool. The receiver part of this integration is already implemented in flux 2.3.0
Goals
Integrate CDEvents into Flux with a CDEvents Provider that supports sending CDEvent events.
Non-Goals
Implementing CDEvents into every Flux controller that is not the notification controller.
Proposal
Add CDEvents to the list of available Providers
in Flux Notification controller. The relevant CDEvent sent by the
Provider
will be determined by a pre-defined mapping of Flux events and relevant CDEvents. These CDEvent payloads
should have meaningful data from the source event. There will be an initial focus on HelmRelease and related events as
the format within Flux for those events is much more consistent.
User Stories
Users of multiple CI/CD tools such as Tekton and Flux could use CDEvents as a way to enable interoperability.
For example, a user may want a Tekton pipeline
to run once a HelmRelease flux resource has succeeded in a Helm
install. On successful helm install, Flux will emit an event with reason InstallSucceeded
which will be mapped to an
Environment.Modified
CDEvent. The CDEvent Provider
will then send a payload with that CDEvent, which will also
contain data from the Flux event, to a CloudEvents broker that Tekton is subscribed to, and trigger a Pipeline Run
within Tekton.
Alternatives
There are currently no viable alternatives for the CDEvent Provider.
Design Details
Adding a Flux Provider
for CDEvents that will send a CDEvent payload upon receiving a flux event from an alert.
Once an alert is triggered for this provider, it will send a CDEvent that corresponds to the Flux event that caused the alert. This CDEvent will be created using the CDEvents Go SDK. The implementation will include a defined mapping of which Flux events trigger a corresponding CDEvent.
The CDEvents broker is not a part of this design and is left to the users to set up however they wish.
Example Provider YAML:
apiVersion: notification.toolkit.fluxcd.io/v1beta2
kind: Provider
metadata:
name: cdevents-provider
namespace: flux-system
spec:
type: cdevents
secretRef:
name: generic-token
address: http://10.100.0.17:5000
Example Default Mappings (Please note these are not final and will be open to discussion):
Helm Event | CDEvent |
---|---|
InstallSucceeded | Environment.Modified |
Build.Finished (outcome not implemented yet) | |
PipeLineRun.Finished (with outcome success) | |
InstallFailed | Incident.Detected |
Build.Finished (outcome not implemented yet) | |
PipeLineRun.Finished (with outcome failed) | |
UpgradeSucceeded | TaskRun.Finished (with outcome success) |
Build.Finished (outcome not implemented yet) | |
PipeLineRun.Finished (with outcome success) | |
UpgradeFailed | TaskRun.Finished (with outcome failed) |
Build.Finished (outcome not implemented yet) | |
PipeLineRun.Finished (with outcome failed) | |
TestSucceeded | TestCaseRun.finished (outcome pass) |
TestFailed | TestCaseRun.finished (outcome fail) |
RollbackSucceeded | TaskRun.Finished (with outcome success) |
Build.Finished (outcome not implemented yet) | |
PipeLineRun.Finished (with outcome success) | |
RollbackFailed | TaskRun.Finished (with outcome failed) |
Build.Finished (outcome not implemented yet) | |
PipeLineRun.Finished (with outcome failed) | |
UninstallSucceeded | Environment.Modified |
UninstallFailed | Incident.Detected |
ReconciliationSucceeded | Environment.Modified |
ReconciliationFailed | Incident.Detected |