繁体   English   中英

如何在我的 configmap.yaml (Helm) 中使用 json 文件?

[英]How can I use a json file in my configmap.yaml (Helm)?

我正在使用 Helm 部署到 Kubernetes 集群。 我研究了 configmaps,发现可以从文件中检索数据并将其放入 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.yamldeployment.yaml都保存在 /chart/templates 中,但我将my-config.json在基本 helm 图表目录中,在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内置对象文档中描述了.Files对象。 .Files.Glob返回匹配某种模式的文件列表,比如*.json 您可能希望.Files.Get返回文件内容。

YAML 对空格处理和缩进也非常敏感。 当您确实检索文件时,您可能希望该行从第一列开始,然后调用比前一行的缩进级别多一些的indent函数。 这也会缩进第一行,您可以使用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 */}}

还有两种其他方法可以包含文件并正确缩进其内容:

  1. 文档中所述,逐行包含它:

     data: key: | {{- range .Files.Lines "myfile.txt" }} {{ . }}{{ end }}

    每一行都会重复这个模板,因此每一行都会有 4 个空格的正确缩进。

  2. 使用{{-删除初始空格并在模板中引入显式换行符:

     data: key: | {{- "\\n" }} {{- .Files.Get "myfile.txt" | indent 4 }}

这两种解决方案都会产生:

data:
  key: |
    contents of
    myfile.txt!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM