generic Provider can push those events out as JSON. This integration receives them: each Git or OCI revision that a Kustomization applies, and each chart version that a HelmRelease installs or upgrades, becomes one Flashduty change.
- Kustomization: recorded as Processing when the revision starts to apply, updated to Done when the reconciliation succeeds, and to Failed when it fails
- HelmRelease: helm-controller only sends an event when an action ends, so Flashduty records the change directly as Done or Failed
In Flashduty On-call
- In the Flashduty console, go to Integration Center → Change Events
- Select Flux CD and enter an integration name
- To assign changes to specific channels, add rules under the integration’s Routes that match labels such as
namespace,name, orcluster - Click Save and copy the generated Push URL
Configure flux
The steps below need Kubernetes permission to create Providers, Alerts, and Secrets in theflux-system namespace (or the namespace where you keep notification config). The notification-controller must be able to reach the domain of the push URL.
1
Create a Secret that holds the push URL
The push URL contains the
integration_key, so do not write it into the Provider. Store it under the address key of a Secret:2
Create the Provider and Alert
Save the following as
flashduty-change.yaml and run kubectl apply -f flashduty-change.yaml:eventSeveritymust beinfo. Flux’sinfolevel includeserrorevents; witherroryou would miss the start and success events, and changes could never finish- List
eventSourcesfor the scope you need:name: '*'matches every object of that kind in the namespace, and objects in other namespaces need their own entry withnamespace - The keys and values in
eventMetadataare written to the change as labels. Use them forcluster,env, and other information the Flux event does not carry, to tell clusters apart and to match in routes. Use the same values in every Alert of one cluster - The Provider type can also be
generic-hmac, which adds anX-Signatureheader; Flashduty does not verify that header
3
Verify the change record
Flux has no way to send a test message. Change the source of a Kustomization that the Alert selects, for example by committing to its Git repository. Confirm the change appears in the Flashduty change list. When the Kustomization applies the new revision, the change updates to Done. Use these commands to check that the Provider and Alert are ready and to see why a push failed:
How changes are merged
One change is one revision applied by one Flux object (a Kustomization or HelmRelease). For a Kustomization the revision is that of its source (GitRepository, OCIRepository, or Bucket), such asmain@sha1:731f7ead...; for a HelmRelease it is the chart version, such as 6.5.4.
- The start, success, and failure of one revision update the same change
- Two revisions of the same object are two changes
- Same-named objects in different clusters, and objects deleted and recreated, are never merged
- A HelmRelease uninstall (
UninstallSucceeded,UninstallFailed) is a separate change
- The same revision is applied again. This happens when you edit the Kustomization or HelmRelease without changing the revision, roll back to an earlier revision, or retry after a failure
- A HelmRelease changes only its values and keeps the chart version: the upgrade event belongs to the same change as the previous install or upgrade
Status mapping
Kustomization
HelmRelease
Done and Failed are end states, and Flashduty records the change’s end time. These events return success, but Flashduty doesn’t record them:
severitytrace- The Kustomization reasons
DependencyNotReadyandHealthCheckCanceled - The HelmRelease reasons
PendingRelease(a stuck release unlocked),DriftCorrected,DriftCorrectionFailed(drift repair), andHealthCheckCanceled - Every event without a revision
reason or severity is rejected.
Change content
- Title:
<namespace>/<object name>: apply <revision> (<kind>), for exampleapps/webapp: apply main@sha1:731f7ea (Kustomization); a HelmRelease uninstall readsuninstall. Git commit IDs are shortened to 7 characters in the title - Link: Flux events carry no web address, so changes have no link
Give every event of one revision the same routing labels by using the same
eventMetadata in all Alerts. Otherwise, later events may land in another channel and start a second change.
FAQ
Why don't I see any changes?
Why don't I see any changes?
- Run
kubectl -n flux-system describe alert flashduty-change. A failed push shows aNotificationDispatchFailedevent with the reason - Confirm the Alert’s
eventSourcesinclude the namespace of the object and thateventSeverityisinfo - When the resources a Kustomization applies have not changed, it only sends
ReconciliationSucceededand noProgressing - The notification-controller rate limits events with identical content (5 minutes by default), so
rate limiting duplicate eventsin its log is normal
Why is there an event every reconcile interval?
Why is there an event every reconcile interval?
kustomize-controller sends
ReconciliationSucceeded after every successful reconciliation, so a revision that is already Done keeps gaining events with each interval while its status stays the same. For the same reason, right after you set this up, the revision each Kustomization currently uses is recorded as a Done change, even though nothing was applied at that moment.Why do HelmRelease changes have no Processing state?
Why do HelmRelease changes have no Processing state?
helm-controller only sends an event when an install, upgrade, test, rollback, or uninstall ends. It sends nothing while the action runs, so Flashduty records the change directly as Done or Failed.
A push returned 400 with 'is not supported' in the message?
A push returned 400 with 'is not supported' in the message?
The response names the unsupported field:
severity "..." is not supported, want info or error, reason "..." is not supported for a Kustomization or for a HelmRelease, involvedObject.uid is required, or timestamp "..." is not an RFC 3339 time. This happens when a Flux release adds a new reason; contact us to add the mapping. That event is not recorded, and later known events of the same change are still recorded.Does a duplicate delivery of the same event create duplicate records?
Does a duplicate delivery of the same event create duplicate records?
No. Flashduty records an event with the same change, time, and status only once.