logo

CALLGOOSE

Argo CD

Overview

This document provides a detailed guide to integrating Argo CD with Callgoose SQIBS for real-time Incident Management, Incident Auto Remediation, Event-Driven Automation, and other automation purposes. The integration enables automatic creation, updating, and resolution of incidents in Callgoose SQIBS based on alerts triggered in Argo CD. The guide includes steps for setting up alerts in Argo CD, configuring webhook notifications, creating API filters in Callgoose SQIBS, and troubleshooting.


Argo CD notifications will be delivered to Callgoose SQIBS through the following pipeline:


Argo CD -> Argo CD Notifications -> Callgoose SQIBS (Webhook Endpoint)


Prerequisites

  • Kubernetes cluster (minikube, kind, EKS, GKE, etc.)
  • kubectl configured
  • helm (optional for some install steps)
  • Argo CD admin access
  • Callgoose SQIBS API token & endpoint


1. Local / Quick Argo CD installation (single-cluster, dev -> production checklist)

1.1 Install Argo CD (official manifests)

This installs Argo CD server, repo-server, application-controller, redis, etc.

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml


Wait for pods:

kubectl -n argocd rollout status deploy/argocd-server
kubectl -n argocd get pods


Get admin password (initial):

kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d


Port-forward (local access;):
kubectl -n argocd port-forward svc/argocd-server 8080:443
# then open https://localhost:8080


  • For production: use an Ingress or LoadBalancer, enable TLS, configure RBAC, enable SSO (OIDC), and secure the API server.


1.2 Install argocd-notifications (controller + config) — two options
1.2.1 Option A — Helm (recommended for prod)
helm repo add argo https://argoproj.github.io/argo-helm
helm repo update
helm install argocd-notifications argo/argo-cd-notifications \
  --namespace argocd \
  --set fullnameOverride=argocd-notifications


1.2.2 Option B — Manifests (quick)
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj-labs/argocd-notifications/stable/manifests/install.yaml


Verify:

kubectl -n argocd get deploy argocd-notifications-controller
kubectl -n argocd logs deploy/argocd-notifications-controller


2. Production-ready argocd-notifications ConfigMap

  • Below is a full example argocd-notifications-cm you can use. It includes:
  • Webhook service for Callgoose SQIBS (with optional HMAC header)
  • Several templates (sync-failed, degraded, out-of-sync, healthy/resolve)
  • Triggers for production-level usage (rate limiting and grouping)
  • Example of using labels and annotations to enrich payloads
  • Replace https://YOUR_CALLGOOSE_ENDPOINT and CALLGOOSE_TOKEN before applying. For more details on the Callgoose SQIBS API Endpoint, refer to the documentation: Callgoose SQIBS API Endpoint.


apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-notifications-cm
  namespace: argocd
data:
  service.webhook.callgoose-sqibs: |
    url: https://YOUR_CALLGOOSE_ENDPOINT/sqibs-api/v1/process?from=ArgoCD&token=CALLGOOSE_TOKEN
    method: POST
    headers:
      Content-Type: application/json
      X-Callgoose-Signature: "sha256={{.secrets.callgoose_secret | hmacsha256 .body}}"

  template.app-sync-failed: |
    title: ArgoCD - Sync Failed - {{.app.metadata.name}}
    body: |
      {
        "event": "sync_failed",
        "app": "{{.app.metadata.name}}",
        "project": "{{.app.spec.project}}",
        "namespace": "{{.app.spec.destination.namespace}}",
        "server": "{{.app.spec.destination.server}}",
        "sync_status": "{{.app.status.sync.status}}",
        "health_status": "{{.app.status.health.status}}",
        "message": "{{.app.status.operationState.message}}",
        "revision": "{{.app.status.sync.revision}}",
        "operation": "{{.app.status.operationState.operation}}",
        "started_at": "{{.app.status.operationState.startedAt}}",
        "finished_at": "{{.app.status.operationState.finishedAt}}",
        "links": {
          "ui": "{{.appstatus.uiURL}}"
        }
      }

  template.app-degraded: |
    title: ArgoCD - Degraded - {{.app.metadata.name}}
    body: |
      {
        "event": "degraded",
        "app": "{{.app.metadata.name}}",
        "project": "{{.app.spec.project}}",
        "namespace": "{{.app.spec.destination.namespace}}",
        "health_status": "{{.app.status.health.status}}",
        "message": "{{.app.status.operationState.message}}",
        "time": "{{.app.status.operationState.finishedAt}}"
      }

  template.app-out-of-sync: |
    title: ArgoCD - OutOfSync - {{.app.metadata.name}}
    body: |
      {
        "event": "out_of_sync",
        "app": "{{.app.metadata.name}}",
        "desired": "{{.app.status.sync.comparedTo}}",
        "status": "{{.app.status.sync.status}}",
        "time": "{{.app.status.operationState.finishedAt}}"
      }

  template.app-healthy: |
    title: ArgoCD - Resolved/Healthy - {{.app.metadata.name}}
    body: |
      {
        "event": "healthy",
        "app": "{{.app.metadata.name}}",
        "project": "{{.app.spec.project}}",
        "namespace": "{{.app.spec.destination.namespace}}",
        "health_status": "{{.app.status.health.status}}",
        "message": "Application is healthy and synced",
        "time": "{{.app.status.operationState.finishedAt}}"
      }

  trigger.on-sync-failed: |
    - description: Send on sync failure (failed operation)
      condition: app.status.operationState.phase == 'Failed'
      group: app.metadata.name
      send: [app-sync-failed]

  trigger.on-degraded: |
    - description: App health is Degraded
      condition: app.status.health.status == 'Degraded'
      group: app.metadata.name
      send: [app-degraded]

  trigger.on-out-of-sync: |
    - description: App is OutOfSync for longer than X minutes
      condition: app.status.sync.status == 'OutOfSync' && app.status.operationState.finishedAt != ''
      group: app.metadata.name
      send: [app-out-of-sync]

  trigger.on-healthy: |
    - description: Application returned to healthy state (resolve)
      condition: app.status.health.status == 'Healthy' && app.status.operationState.phase == 'Succeeded'
      group: app.metadata.name
      send: [app-healthy]

  subscriptions: |
    - recipients:
      - callgoose-sqibs
      triggers:
      - on-sync-failed
      - on-degraded
      - on-out-of-sync
      - on-healthy


How to apply:

kubectl apply -f argocd-notifications-cm.yaml -n argocd
kubectl rollout restart deployment argocd-notifications-controller -n argocd


3. Example JSON payloads

3.1 Sync failed — Triggered payload
{
  "event": "sync_failed",
  "app": "frontend",
  "project": "default",
  "namespace": "production",
  "server": "https://kubernetes.default.svc",
  "sync_status": "OutOfSync",
  "health_status": "Degraded",
  "message": "Sync operation failed: Failed to apply manifests: image pull backoff",
  "revision": "abcd1234",
  "operation": "Sync",
  "started_at": "2025-11-14T08:40:00Z",
  "finished_at": "2025-11-14T08:41:02Z",
  "links": {
    "ui": "https://argocd.company.example/applications/frontend"
  }
}


3.2 Healthy/resolved — Resolved payload
{
  "event": "healthy",
  "app": "frontend",
  "project": "default",
  "namespace": "production",
  "health_status": "Healthy",
  "message": "Application is healthy and synced",
  "time": "2025-11-14T08:45:10Z"
}


4. Callgoose SQIBS: API Filter examples (update if templates changed)

Trigger Filter — Create incident on sync_failed / degraded / out_of_sync

  • Payload JSON Key: event
  • Key Value Contains: sync_failed OR degraded OR out_of_sync
  • Map Incident With: app
  • Incident Title: message
  • Incident Description: leave empty to include full JSON OR use message to get "Sync operation failed: Failed to apply manifests: image pull backoff."


Resolve Filter — Resolve incident when app becomes healthy

  • Payload JSON Key: event
  • Key Value Contains: healthy
  • Incident Mapped With: app

Refer to the API Filter Instructions and FAQ for more details.


5. Testing & verification

  • Apply the ConfigMap and restart the notifications controller.
  • Trigger a failing sync (deploy an invalid image or corrupt manifest) in Argo CD UI or by kubectl apply.
  • Check argocd-notifications-controller logs for outgoing webhook delivery.
  • kubectl -n argocd logs deploy/argocd-notifications-controller
  • Verify the event in Callgoose SQIBS (incident created).
  • Fix the issue. When Argo CD marks the app Healthy, verify the incident resolves.


6. Troubleshooting & debugging

  • If no event arrives: check argocd-notifications-controller logs and whether the webhook URL is reachable.
  • If wrong mapping: inspect raw JSON in Callgoose SQIBS API logs (enable debug on API token).
  • If too many alerts (alert storm): add throttling/aggregation in triggers (group by app and add a minimal interval before resend) or configure controller retries in helm values.


7. Security recommendations

  • Use HTTPS endpoints and prefer bearer auth headers. Store secrets in argocd-notifications-secret.
  • Restrict network egress from the cluster to only the Callgoose endpoints.


8. Conclusion

This guide gives a production-ready recipe for integrating Argo CD with Callgoose SQIBS using argocd-notifications. Use the provided ConfigMap and templates as a starting point, update the Callgoose API filters to match the JSON keys, and test end-to-end using the example payloads. For advanced use cases (multi-cluster, per-namespace routing, or custom severity mapping), expand triggers and mapping keys accordingly.


CALLGOOSE
SQIBS

Advanced Automation platform with effective On-Call schedule, real-time Incident Management and Incident Response capabilities that keep your organization more resilient, reliable, and always on

Callgoose SQIBS can Integrate with any applications or tools you use. It can be monitoring, ticketing, ITSM, log management, error tracking, ChatOps, collaboration tools or any applications

Callgoose providing the Plans with Unique features and advanced features for every business needs at the most affordable price.



Unique Features

  • 30+ languages supported
  • IVR for Phone call notifications
  • Dedicated caller id
  • Advanced API & Email filter
  • Tag based maintenance mode
Book a Demo

Signup for a freemium plan today &
Experience the results.

No credit card required