我必须将客户端脚本文件包含为configmap,并挂载到pods中,以便在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行:找不到预期的':'” 注意:不能更改结构并且不能使用File函数,因为构建发生在其他地方,仅会提供values.ymal。
如何解析它。
答案 0 :(得分:1)
尝试一下:
localStorage
答案 1 :(得分:0)
您可以将helm template
与相同的-f
和--set
标志一起使用,以查看模板的输出是什么。这是调试此类问题的关键,您可以在继续阅读之前先尝试一下,以了解发生了什么问题以及是否已解决问题。
Kubernetes消耗的YAML文件对缩进非常敏感。 Helm的Go文本/模板引擎并不是特别了解YAML结构。您可能会看到,脚本第二行上的echo
根本没有缩进,这违反了YAML的缩进规则。
对此有两个答案:
使用indent模板函数来缩进要注入的内容。请注意,这包括第一行,因此您无需在YAML模板中缩进该行。
data:
{{ range $key, $val:= .Values.app.server }}
{{ $key }}: |
{{ $val | indent 4 }}
{{ end }}
头盔有several undocumented extensions。特别是,您可以使用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;第二个是更简洁的模板;但两者应该相等。