Managing Chart Files
1. Reading File Content
Example: Inline file in ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "myapp.fullname" . }}-conf
data:
app.conf: |-
{{- .Files.Get "conf/app.conf" | nindent 4 }}
2. Listing Files
| Call | Returns |
.Files.Glob "configs/*" | Map of relative path → bytes |
(.Files.Glob "configs/*").AsConfig | ConfigMap-style YAML map |
(.Files.Glob "secrets/*").AsSecrets | Base64-encoded Secret data |
3. Reading Files as Bytes
Example: Binary file
data:
logo.png: {{ .Files.GetBytes "files/logo.png" | b64enc }}
4. Using Files in ConfigMaps
Example: Glob to ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "myapp.fullname" . }}-configs
data:
{{- (.Files.Glob "configs/*.yaml").AsConfig | nindent 2 }}
5. Using Files in Secrets
Example: Glob to Secret
apiVersion: v1
kind: Secret
metadata:
name: {{ include "myapp.fullname" . }}-certs
type: Opaque
data:
{{- (.Files.Glob "certs/*").AsSecrets | nindent 2 }}
6. Iterating Over Files
Example: Loop with range
{{- range $path, $bytes := .Files.Glob "scripts/*.sh" }}
{{ base $path }}: |-
{{ $.Files.Get $path | indent 4 }}
{{- end }}
7. Checking File Existence
| Pattern | Behavior |
{{ if .Files.Get "x" }}…{{ end }} | Empty string if missing |
{{ if (.Files.Glob "configs/*") }}…{{ end }} | Empty map if no matches |
8. Encoding File Content
| Pipeline | Use |
.Files.Get "x" | b64enc | Base64 (for Secret data) |
.Files.Get "x" | sha256sum | Checksum for change-detection annotation |
.Files.GetBytes "x" | b64enc | Binary-safe |
9. Including Binary Files
Warning: Always use .Files.GetBytes (not Get) for binary files. Get performs UTF-8 sanitization and corrupts non-text bytes.
10. Organizing Static Files
| Directory | Convention |
files/ | Generic static assets |
configs/ | App config files for ConfigMap embedding |
scripts/ | Shell/SQL scripts |
dashboards/ | Grafana JSON dashboards |
Note: Anything outside templates/, crds/, charts/ is accessible via .Files (subject to .helmignore).