argocd notifications

This commit is contained in:
Danijel Simeunovic
2026-03-04 10:50:35 +01:00
parent 4d3269a24c
commit ab58c8a62a
5 changed files with 106 additions and 0 deletions

View File

@@ -34,6 +34,10 @@ metadata:
namespace: argocd namespace: argocd
annotations: annotations:
argocd.argoproj.io/sync-wave: "1" argocd.argoproj.io/sync-wave: "1"
notifications.argoproj.io/subscribe.on-sync-running.slack: ""
notifications.argoproj.io/subscribe.on-sync-succeeded.slack: ""
notifications.argoproj.io/subscribe.on-sync-failed.slack: ""
notifications.argoproj.io/subscribe.on-degraded.slack: ""
labels: labels:
app.kubernetes.io/name: dot-ai-stack app.kubernetes.io/name: dot-ai-stack
app.kubernetes.io/part-of: apps app.kubernetes.io/part-of: apps

View File

@@ -7,6 +7,12 @@ metadata:
app.kubernetes.io/name: feedback-hub app.kubernetes.io/name: feedback-hub
app.kubernetes.io/part-of: apps app.kubernetes.io/part-of: apps
app.kubernetes.io/managed-by: argocd app.kubernetes.io/managed-by: argocd
annotations:
argocd.argoproj.io/sync-wave: "1"
notifications.argoproj.io/subscribe.on-sync-running.slack: ""
notifications.argoproj.io/subscribe.on-sync-succeeded.slack: ""
notifications.argoproj.io/subscribe.on-sync-failed.slack: ""
notifications.argoproj.io/subscribe.on-degraded.slack: ""
spec: spec:
project: default project: default
source: source:

View File

@@ -3,6 +3,12 @@ kind: Application
metadata: metadata:
name: music-man name: music-man
namespace: argocd namespace: argocd
annotations:
argocd.argoproj.io/sync-wave: "1"
notifications.argoproj.io/subscribe.on-sync-running.slack: ""
notifications.argoproj.io/subscribe.on-sync-succeeded.slack: ""
notifications.argoproj.io/subscribe.on-sync-failed.slack: ""
notifications.argoproj.io/subscribe.on-degraded.slack: ""
labels: labels:
app.kubernetes.io/name: music-man app.kubernetes.io/name: music-man
app.kubernetes.io/part-of: apps app.kubernetes.io/part-of: apps

View File

@@ -0,0 +1,16 @@
---
apiVersion: bitnami.com/v1alpha1
kind: SealedSecret
metadata:
creationTimestamp: null
name: argocd-notifications-secret
namespace: argocd
spec:
encryptedData:
slack-webhook-url: AgBIIEfU1TzNNJoQMsiKqF+x0y5vGu5iMwvTADGuUcjlz7DtfExTQu86OdUO1+Gxri/NKKj+KN1Tv7WNJs5Yo/hjjLs/JTxKYuEF6S0xaqLX3sRCkMCdVpRkH079CW4ayDP2moIGrG9+nq0iGNA7qyPssjjSCeMaj6SiHAIXdV+f/5XLrwHUybL2drBp7OVsZcLQJhQRGYIM/R4PvQJGLv95L/XPn5aOK8jxhHIsaxwRlAuGpCP/Ct7mG6H2qL0zKZn/H7Vl+x/Xgx0a/VGcEMosgQY1PeSqihyTcCsSu1g2rd8A03nw8v3kIjkiMzSpIKHoEpWuoNWxDmwMYrpvy1QUnpW2nT9WkLoaoi4lczNr63Z/LT2mCTMhgC83OxF5IA/9cekWh+VMHVsS2c4qQvlDZoT2N4SwkWy++rreFwrXdaMBJHIQI2wT9rtWwRLG4sLigaxBPX7lzVlplkSxHgrVi6c329u6+2Dcw9eMOPfw7GmbnF5H+t1AmFEBbrf2LOPGRy3yd+5g5U4Eyhf7YmA9SaT7TB1w3UhacSCslVH41NLtqNV65lvAjPCyYbEEjmnV02i9rPDyHMitrZ9Z8Spzo3oiK0ZndWh98u8iA7NJY2i+L01n7OLGjRBGL364URHRqcDxCPRrc0ApRBj5aa4HEScowmWCPcoqgzwFfclAz2iNAgQ7h+7/rUN2k96V7Eo0xco+bF/XgwWX5ehIB6FQYKborWa7XHvAGEc85eD3bNOnOUF1RJB/4GzN5yu/7fyeRVnKNEAzZ2cuXD+5RA5gPyqBVgTFspl2MasbMW9KOZT4YKts0ILXqpo=
template:
metadata:
creationTimestamp: null
name: argocd-notifications-secret
namespace: argocd
type: Opaque

View File

@@ -20,3 +20,77 @@ server:
extraArgs: extraArgs:
- --insecure - --insecure
- --disable-auth - --disable-auth
notifications:
# Don't create secret via Helm - using SealedSecret instead
secret:
create: false
# Configure notification service and templates
cm:
# Define Slack service using webhook URL from sealed secret
service.webhook.slack: |
url: $slack-webhook-url
headers:
- name: Content-Type
value: application/json
# Template: Application syncing
template.app-syncing: |
webhook:
slack:
method: POST
body: |
{
"text": "🔄 *{{ .app.metadata.name }}* is syncing...\n📦 Revision: {{ .app.status.sync.revision | substr 0 7 }}"
}
# Template: Sync succeeded
template.app-sync-succeeded: |
webhook:
slack:
method: POST
body: |
{
"text": "✅ *{{ .app.metadata.name }}* sync succeeded\n📦 Revision: {{ .app.status.sync.revision | substr 0 7 }}{{ range .app.status.summary.images }}\n🏷 Image: {{ . }}{{ end }}"
}
# Template: Sync failed
template.app-sync-failed: |
webhook:
slack:
method: POST
body: |
{
"text": "❌ *{{ .app.metadata.name }}* sync failed\n📦 Revision: {{ .app.status.sync.revision | substr 0 7 }}\n⚠ Message: {{ .app.status.operationState.message }}"
}
# Template: Application degraded
template.app-degraded: |
webhook:
slack:
method: POST
body: |
{
"text": "⚠️ *{{ .app.metadata.name }}* is degraded\n🏥 Health: {{ .app.status.health.status }}\n💬 Message: {{ .app.status.health.message }}"
}
# Trigger: Sync running
trigger.on-sync-running: |
- when: app.status.operationState.phase in ['Running']
send: [app-syncing]
# Trigger: Sync succeeded
trigger.on-sync-succeeded: |
- when: app.status.operationState.phase in ['Succeeded']
send: [app-sync-succeeded]
# Trigger: Sync failed
trigger.on-sync-failed: |
- when: app.status.operationState.phase in ['Failed']
send: [app-sync-failed]
# Trigger: Application degraded
trigger.on-degraded: |
- when: app.status.health.status == 'Degraded'
send: [app-degraded]