Bug: ArgoCD Apps list shows empty sync/health status for every external Argo CD application (row keys are lower-cased, lookup keys are not) · Issue #7030 · devtron-labs/devtron · GitHub
Skip to content

Bug: ArgoCD Apps list shows empty sync/health status for every external Argo CD application (row keys are lower-cased, lookup keys are not) #7030

Open

Description

@kasparpl

📜 Description

On the Applications → ArgoCD Apps tab (external Argo CD instance registered via the cluster), the App Status column shows - for every application, even though every Argo Application in the cluster is Synced / Healthy. The list API confirms the fields are empty:

GET /orchestrator/argo-application?clusterIds=1
→ result[].appStatus == "" and result[].syncStatus == "" for all 16 apps

The app details page (resource tree) shows the correct health, so only the list is affected.

Root cause (verified against the running binary and the source at the same commit):

  • The list is built from the Kubernetes Table API response by BuildK8sObjectListTableData in common-lib (utils/k8s/K8sUtil.go), which lower-cases every column name before using it as the row-map key:
    columnName = strings.ToLower(columnName)
    so the row keys are sync status and health status.
  • getApplicationListDtos in pkg/argoApplication/ArgoApplicationService.go reads the rows with the printer-column constants from commonBean:
    K8sResourceColumnDefinitionSyncStatus   = "Sync Status"
    K8sResourceColumnDefinitionHealthStatus = "Health Status"
    The keys never match, so SyncStatus / HealthStatus stay empty.

Live proof from the same Devtron instance: POST /orchestrator/k8s/resource/list for argoproj.io/v1alpha1 Application returns

headers: ["name", "namespace", "sync status", "health status"]
rows[0]: {"name": "alloy", "namespace": "argocd", "sync status": "Synced", "health status": "Healthy", ...}

The values are there, under lower-case keys. The same code is present on main (5916f39) and in v2.2.0; common-lib pin v0.18.1-0.20241001061923-eda545dc839e contains the ToLower.

👟 Reproduction steps

  1. Register a cluster that has an Argo CD instance (Applications in namespace argocd).
  2. Make sure at least one Application is Synced/Healthy (kubectl -n argocd get applications shows the columns).
  3. Open Applications → ArgoCD Apps in the Devtron dashboard, or call GET /orchestrator/argo-application?clusterIds=<id>.

👍 Expected behavior

appStatus / syncStatus in the list response (and the App Status column) reflect status.health.status / status.sync.status of the Application, e.g. Healthy / Synced.

👎 Actual Behavior

Both fields are empty strings; the UI shows - for every external Argo CD app.

☸ Kubernetes version

v1.36.4 (kubeadm, single node). Argo CD v3.4.5 (applications.argoproj.io CRD with printer columns Sync Status, Health Status, Revision, Project).

Cloud provider

Bare metal (Proxmox VM, OVH). Devtron v2.1.1 via chart devtron-operator 0.23.2, orchestrator image quay.io/devtron/devtron:1188d0b9-434-38818 (gitCommit 1188d0b9).

🌍 Browser

Chrome (not browser-related; reproducible with curl against the API).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions