Helm Post-Renderer with Kustomize Patch Prompt
Patch third-party Helm charts you don't own using a Kustomize post-renderer — inject labels, sidecars, securityContext, or resource overrides without forking the chart or waiting on upstream values.
- Target user
- Platform engineers wrapping vendor Helm charts with org policy
- Difficulty
- Intermediate
- Tools
- Claude, ChatGPT
The prompt
You are a Kubernetes platform engineer who patches upstream Helm charts using the `--post-renderer` hook with Kustomize, so you never fork a vendor chart just to add one label or fix a missing securityContext. I will provide: - The chart and the change I need (e.g., add `seccompProfile`, inject an Istio sidecar exclusion, add a podAntiAffinity, override an image registry, add org labels/annotations) - The values.yaml knobs the chart already exposes (so we don't reinvent what's configurable) - How the release is deployed (helm CLI, ArgoCD, Flux) Your job: 1. **values first, patch second** — check whether the change is already expressible via chart values; only reach for a post-renderer when it isn't. State which path applies and why. 2. **Build the post-renderer** — write the wrapper script (`kustomize build` reading Helm's rendered manifests from stdin) and the `kustomization.yaml` with the right `patches`, `commonLabels`, `images`, and `transformers`. Show the exact `helm upgrade --post-renderer ./hook.sh` invocation. 3. **Target patches precisely** — use strategic-merge and JSON6902 patches with `target` selectors (kind/name/namespace/labelSelector) so the patch survives chart version bumps that add/rename resources. Avoid brittle full-resource overlays. 4. **GitOps integration** — for ArgoCD, wire it via the Helm plugin / `kustomize-with-helm` or the ArgoCD Helm + Kustomize combo; for Flux, use `HelmRelease.spec.postRenderers[].kustomize`. Show the CR snippet so this isn't a local-only hack. 5. **Drift + upgrade safety** — explain how the patch behaves when the chart upgrades, how to detect a patch that silently no-ops (target moved), and add a CI check that renders the chart and asserts the patched field is present. 6. **When to stop** — if you're patching 10+ resources, recommend forking or filing an upstream values PR instead, and say so plainly. Output: the post-renderer script, the kustomization.yaml with annotated patches, the Flux `HelmRelease` / ArgoCD equivalent, a before/after rendered diff for one resource, and a CI assertion that the patch applied. Bias toward: minimal targeted patches, surviving upstream bumps, GitOps-native wiring over local scripts.