我必须将客户端脚本文件包含为configmap并挂载到pod如何在values.yaml中为以下结构创建configmap
app:
server:
client-cli1.sh: |
#!/bin/bash
echo "Hello World"
client-cli2.sh: |
#!/bin/bash
echo "Hello World"
这是configmap文件
apiVersion: v1
kind: ConfigMap
metadata:
name: cli-config
data:
{{ range $key, $val:= .Values.app.server }}
{{ $key }}: |
{{ $val }}
{{ end }}
我收到错误“错误将YAML转换为JSON:yaml:第14行:找不到预期':'”注意:无法更改结构并且无法使用文件功能,因为构建发生在其他地方只会提供values.ymal。
如何解析这个。
试试这个:
apiVersion: v1
kind: ConfigMap
metadata:
name: cli-config
data:
{{ toYaml .Values.app.server | indent 2 }}
您可以使用helm template
和相同的-f
和--set
标志来查看模板的输出。这是调试此类问题的关键,您可以在阅读之前尝试这一点,以了解出现了什么问题以及是否已修复它。
Kubernetes消耗的YAML文件对缩进非常敏感。 Helm的Go文本/模板引擎并不特别了解YAML结构。你可能会看到脚本第二行的echo
根本没有缩进,这打破了YAML的缩进规则。
这有两个答案:
data:
{{ range $key, $val:= .Values.app.server }}
{{ $key }}: |
{{ $val | indent 4 }}
{{ end }}
toJson
将字符串转换为JSON字符串,包括转义换行符等详细信息。 YAML 1.2旨在成为JSON的超集,因此这应该有效:
data:
{{ range $key, $val:= .Values.app.server }}
{{ $key }}: {{ $val | toJson }}
{{ end }}
就此而言,你可以使用toYaml
让Helm为你努力工作:
data:
{{ .Values.app.server | toYaml | indent 2 }}
检查helm template
以确保它们输出您期望的结果。第一个选项将产生更易读的ConfigMap YAML;第二个是更简洁的模板;但两者都应该是等价的。