Generating Helm values files with minimal-diff approach
Generate Helm values files that only override necessary defaults.
name/namespace are CLI args, not valuesBefore generating values, understand the chart:
# Get chart info
helm show values <chart> [--version <version>]
# Or for OCI charts
helm show values oci://registry/chart
# Check chart README for constraints
helm show readme <chart>
Gather:
[ ] Default values identified
[ ] Required values (no defaults) identified
[ ] Value constraints documented (enums, ranges)
[ ] Chart version pinned
Structure:
# values.yaml
# Only override what differs from defaults
# Example: Overriding replica count (default: 1)
replicaCount: 3
# Example: Overriding image (default: nginx:latest)
image:
repository: myregistry/myapp
tag: "1.2.3" # Quotes for version strings
# Example: Boolean (NOT "true" string)
autoscaling:
enabled: true
What to EXCLUDE:
name: or namespace: (use helm install <name> -n <ns>)| YAML Type | Example | Common Mistake |
|-----------|---------|----------------|
| Boolean | enabled: true | enabled: "true" |
| Integer | replicas: 3 | replicas: "3" |
| String version | tag: "1.2.3" | tag: 1.2.3 (parsed as float) |
| Null | value: null | value: "" |
| List | - item | Forgetting - |
# Lint values
helm lint <chart> -f values.yaml
# Template to verify
helm template <release> <chart> -f values.yaml
# Dry-run install
helm install <release> <chart> -f values.yaml --dry-run
Ingress:
ingress:
enabled: true
className: nginx
hosts:
- host: app.example.com
paths:
- path: /
pathType: Prefix
tls:
- secretName: app-tls
hosts:
- app.example.com
Resources:
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 512Mi
Service Account (with IRSA/Workload Identity):
serviceAccount:
create: true
annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::ACCOUNT:role/ROLE
tag: 1.2.3 without quotes is parsed as a float (1.2) then truncated — always quote version strings: tag: "1.2.3"enabled: "true" is a string, not a boolean — Helm templates checking if .Values.enabled will always be true (non-empty string)name: or namespace: in values.yaml has no effect — these are CLI args: helm install <name> -n <ns>helm upgrade without --install fails if the release doesn't exist — use helm upgrade --install for idempotent deploymentsoci://) require helm registry login first — authentication errors are crypticname: or namespace: in values"true" instead of trueWhen generating values, output:
User: "Generate Helm values for nginx-ingress"
Response:
# values.yaml for ingress-nginx
# Chart: ingress-nginx/ingress-nginx v4.10.0
# Only non-default values shown
controller:
replicaCount: 2
resources:
requests:
cpu: 100m
memory: 90Mi
limits:
cpu: 500m
memory: 256Mi
service:
type: LoadBalancer
# Install command
helm install ingress-nginx ingress-nginx/ingress-nginx \
--namespace ingress-nginx \
--create-namespace \
-f values.yaml
# Verify
helm template ingress-nginx ingress-nginx/ingress-nginx -f values.yaml | kubectl apply --dry-run=client -f -
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer