4.3 KiB
Runbook: Helm Render Failure
Symptom → diagnosis → remediation for ArgoCD Applications stuck in
ComparisonErrororErrParsingAppProjectstate due to Helm template rendering failures.Layer: 2 (Advisory). Agents diagnose and suggest fixes; humans apply.
Per AI Blitz Plan §5.2. See also: argocd-sync-failure.md.
Symptoms
- ArgoCD Application shows
ComparisonError: failed to generate manifest helm templaterun locally produces YAML errors- Application stuck in
UnknownorErrorhealth state with no sync progress - Pre-commit hook
cac validatefails on a PR with YAML parsing errors
Decision tree
Application stuck in ComparisonError?
│
├── Run: argocd app get <appName> --show-operation
│ (or: argocd app logs <appName>)
│
├── Error contains "values file not found"?
│ └── → [A] Missing values file
│
├── Error contains "chart not found" or "no chart found"?
│ └── → [B] Missing chart directory
│
├── Error contains "unmarshal" or "cannot unmarshal" or "yaml: line"?
│ └── → [C] YAML syntax error in values or chart
│
├── Error contains "template: ... nil pointer" or "function not defined"?
│ └── → [D] Chart template bug
│
└── Error contains "AppProject not found" or "unauthorized"?
└── → See argocd-sync-failure.md
[A] Missing values file
Cause: The valueFiles path in the incubator Application YAML points to a values file that doesn't exist.
Diagnosis:
# Check what valueFiles the incubator references:
grep 'valueFiles' incubator/<env>/<cluster>.yaml
# Verify the values file exists:
ls values/<env>/incubator-infra-<cluster>-values.yaml
Fix: Create the missing values file (use add-new-cluster.md for a new cluster) or correct the path in the incubator YAML. Open a PR.
[B] Missing chart directory
Cause: An appSpec[].chartDir value points to a directory that doesn't exist in devops-infra-helm-charts/helm-templates/.
Diagnosis:
# Identify which appSpec entry has the bad chartDir:
helm template generic-argo-apps-chart/ -f values/<env>/<cluster>-values.yaml 2>&1 | head -30
# Verify in helm-charts repo:
ls /path/to/devops-infra-helm-charts/helm-templates/<chartDir>/
Fix: Either:
- Add the chart to
devops-infra-helm-charts(work in the sister repo). - Correct the
chartDirin the values file to an existing directory.
Open a PR with the fix.
[C] YAML syntax error
Cause: Invalid YAML in a values file (e.g., bad indentation, missing quotes, stray character).
Diagnosis:
yamllint values/<env>/<cluster>-values.yaml
# Or for more context:
python3 -c "import yaml; yaml.safe_load(open('values/<env>/<cluster>-values.yaml'))"
Common causes:
- Stray tab character (YAML requires spaces)
- Missing
-prefix on an appSpec entry - Unquoted special characters in namespace or name fields
- Trailing whitespace after a value
Fix: Correct the YAML syntax. Run yamllint and helm template locally before opening PR. Pre-commit cac validate hook should also catch this.
[D] Chart template bug
Cause: The generic-argo-apps-chart/templates/genericTemplate.yaml has a nil pointer dereference, undefined function, or logic error.
Diagnosis:
helm template generic-argo-apps-chart/ -f values/<env>/<cluster>-values.yaml 2>&1
Impact: This breaks ALL Applications rendered by this chart, across ALL clusters. This is a fleet-wide outage risk.
Fix: This requires a fix to generic-argo-apps-chart/. This is a HIGH RISK operation — see AGENT_BOUNDARIES.md. Escalate to platform team immediately via escalation-matrix.md.
Do not attempt to fix chart templates without explicit platform-team sign-off and test with helm template against multiple values files.
Preventive checks
Run before any PR that modifies values files or generic-argo-apps-chart/:
# Test all values files in one env:
for f in values/prd/*.yaml; do
helm template generic-argo-apps-chart/ -f "$f" > /dev/null \
&& echo "OK: $f" || echo "FAIL: $f"
done