如何在 configmap.yaml (Helm) 中使用 json 文件?
How can I use a json file in my configmap.yaml (Helm)?
我正在使用 Helm 部署到 Kubernetes 集群。我研究了 configmap,发现可以从文件中检索数据并将其放入 configmap。
我有以下 configmap.yaml
:
kind: ConfigMap
apiVersion: v1
metadata:
name: {{ .Values.app.configMap }}
namespace: {{ .Values.app.namespace }}
data:
config.json: |-
{{ .Files.Glob "my-config.json" | indent 2}}
并且我的 deployment.yaml
包含相关的 volumeMount(如果我将实际 json 数据直接放入 configmap.yaml 然后配置部署)。我的 configmap.yaml
和 deployment.yaml
都保存在 /chart/templates 中,但我将 my-config.json
保存在基本 helm chart 目录中,在 templates
文件夹之外。
当我尝试使用图表进行部署时,出现以下错误:
Error: template: chart/templates/configmap.yaml:8:54: executing "chart/templates/configmap.yaml" at <2>: wrong type for value; expected string; got engine.files
如何在我的 configmap 中使用 .json
文件而不将原始 json 数据直接放入 yaml 文件?
Helm Built-in Objects 文档中描述了 .Files
对象。 .Files.Glob
returns 匹配某种模式的文件列表,如 *.json
;您可能想要 .Files.Get
而不是 return 文件内容。
YAML 对空格处理和缩进也非常敏感。当您检索文件时,您可能希望该行从第一列开始,但随后调用 indent
函数时使用比上一行的缩进级别多的数字。这也缩进了第一行,你可以 double-check 和 helm template
正确的结果出来了。
data:
{{-/* Note, indent of only two spaces */}}
config.json: |-
{{ .Files.Get "my-config.json" | indent 4 }}
{{/* .Get, not .Glob; indent 4 spaces, more than 2 above */}}
还有 2 种其他方法可以包含文件并正确缩进其内容:
如前所述逐行包含它in the documentation:
data:
key: |
{{- range .Files.Lines "myfile.txt" }}
{{ . }}{{ end }}
每一行都会重复此模板,因此每一行都会有 4 个空格的正确缩进。
使用 {{-
删除初始空格并在模板中引入显式换行符:
data:
key: |
{{- "\n" }}
{{- .Files.Get "myfile.txt" | indent 4 }}
这两种解决方案都会产生:
data:
key: |
contents of
myfile.txt!
我正在使用 Helm 部署到 Kubernetes 集群。我研究了 configmap,发现可以从文件中检索数据并将其放入 configmap。
我有以下 configmap.yaml
:
kind: ConfigMap
apiVersion: v1
metadata:
name: {{ .Values.app.configMap }}
namespace: {{ .Values.app.namespace }}
data:
config.json: |-
{{ .Files.Glob "my-config.json" | indent 2}}
并且我的 deployment.yaml
包含相关的 volumeMount(如果我将实际 json 数据直接放入 configmap.yaml 然后配置部署)。我的 configmap.yaml
和 deployment.yaml
都保存在 /chart/templates 中,但我将 my-config.json
保存在基本 helm chart 目录中,在 templates
文件夹之外。
当我尝试使用图表进行部署时,出现以下错误:
Error: template: chart/templates/configmap.yaml:8:54: executing "chart/templates/configmap.yaml" at <2>: wrong type for value; expected string; got engine.files
如何在我的 configmap 中使用 .json
文件而不将原始 json 数据直接放入 yaml 文件?
Helm Built-in Objects 文档中描述了 .Files
对象。 .Files.Glob
returns 匹配某种模式的文件列表,如 *.json
;您可能想要 .Files.Get
而不是 return 文件内容。
YAML 对空格处理和缩进也非常敏感。当您检索文件时,您可能希望该行从第一列开始,但随后调用 indent
函数时使用比上一行的缩进级别多的数字。这也缩进了第一行,你可以 double-check 和 helm template
正确的结果出来了。
data:
{{-/* Note, indent of only two spaces */}}
config.json: |-
{{ .Files.Get "my-config.json" | indent 4 }}
{{/* .Get, not .Glob; indent 4 spaces, more than 2 above */}}
还有 2 种其他方法可以包含文件并正确缩进其内容:
如前所述逐行包含它in the documentation:
data: key: | {{- range .Files.Lines "myfile.txt" }} {{ . }}{{ end }}
每一行都会重复此模板,因此每一行都会有 4 个空格的正确缩进。
使用
{{-
删除初始空格并在模板中引入显式换行符:data: key: | {{- "\n" }} {{- .Files.Get "myfile.txt" | indent 4 }}
这两种解决方案都会产生:
data:
key: |
contents of
myfile.txt!