在 this Stack Overflow post 中,您似乎应该能够使用
toYaml
渲染文本,然后将其传递给 tpl
但这对我不起作用。
采取以下措施:
#values.yaml
configMaps:
test:
data:
config.yaml: |-
aaaaaa: sdlkfjlskdfj
bbbb: sdlkfjlskdfj
ccccc: sdlkfjlskdfj
ssdfs: slkdjflksdj
cccc: sdlkfjlskdfj
lskdjflksd: slkdjflksdj
sdfs: slkdjflksdj
AList:
- aaaa
- bbbb
- cccc
#In my chart
apiVersion: v1
kind: ConfigMap
metadata:
name: mymap
data:
{{ tpl (toYaml .Values.configMaps.test.data) . }}
这一直有效,直到我实际向需要渲染的文本添加一些内容为止。
当我尝试向该文本添加函数时,出现错误:
#values.yaml
configMaps:
test:
data:
config.yaml: |-
valueFromFunction: prefix-{{ include "myfunction" . }}-suffix
aaaaaa: sdlkfjlskdfj
bbbb: sdlkfjlskdfj
ccccc: sdlkfjlskdfj
ssdfs: slkdjflksdj
cccc: sdlkfjlskdfj
lskdjflksd: slkdjflksdj
sdfs: slkdjflksdj
AList:
- aaaa
- bbbb
- cccc
那是因为当它到达
tpl
时,函数看起来像这样:include \\\"myfunction\\\"\n
我尝试通过
tpl
first运行它,但这给了我另一个错误:wrong type for value; expected string; got map[string]interface {}
在 YAML 中编写和转义字符串有多种方法。 看起来
toYaml
选择了一个双引号字符串,这对于这种特殊情况不起作用。
对于这个特定的设置,您可能知道
.Values.configMaps.test.data
具有特定的结构:它是一个带有字符串值的字符串键映射,并且没有进一步的嵌套。 如果您利用这些知识,那么您可以直接在字符串值上调用 tpl
,并且不会有额外的 YAML 引用层。
您应该能够执行以下操作:
apiVersion: v1
kind: ConfigMap
metadata:
name: mymap
data:
{{- $k, $v := range .Values.configMaps.test.data }}
{{ $k }}: |-
{{ tpl $v . | indent 4 }}
{{- end }}