如果文件的内容是静态的,那么您可以在图表中创建与模板目录相同级别的文件目录(不在其中)并像这样引用它们:
kind: ConfigMap
metadata:
name: splunk-master-configmap
data:
{{ (.Files.Glob "files/indexes.conf").AsConfig | indent 2 }}
{{ (.Files.Glob "files/otherfile.conf").AsConfig | indent 2 }}
# ... and so on
如果您希望能够引用文件中变量的值,以便通过 values.yaml 控制内容,那么这会发生故障。如果您想单独公开每个值,那么helm 文档中有一个使用 range 的示例。但我认为stable/mysql 图表的作用很合适,或者你的情况。它有一个将值作为字符串的 ConfigMap:
{{- if .Values.configurationFiles }}
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ template "mysql.fullname" . }}-configuration
data:
{{- range $key, $val := .Values.configurationFiles }}
{{ $key }}: |-
{{ $val | indent 4}}
{{- end }}
{{- end -}}
values.yaml 允许图表用户设置和覆盖文件及其内容:
# Custom mysql configuration files used to override default mysql settings
configurationFiles:
# mysql.cnf: |-
# [mysqld]
# skip-name-resolve
# ssl-ca=/ssl/ca.pem
# ssl-cert=/ssl/server-cert.pem
# ssl-key=/ssl/server-key.pem
它注释掉该内容并将其留给图表的用户进行设置,但您可以在 values.yaml 中设置默认值。
tpl
仅当您需要进一步的灵活性时才需要。stable/keycloak 图表允许图表用户创建自己的配置映射,并通过 tpl将其指向 keycloak 部署。但我认为你的情况可能最接近 mysql 的情况。
编辑:tpl 函数还可用于获取使用 Files.Get 加载的文件的内容,并有效地使该内容成为模板的一部分 - 请参阅如何将多个模板化配置文件加载到 helm 图表中?如果你对此感兴趣