我希望能够从如下 Helm 模板文件中插入带有 toJson helm 函数的模板,如文档中所述:
value: {{ include "mytpl" . | lower | quote }}
https://helm.sh/docs/howto/charts_tips_and_tricks/#know-your-template-functions
我的配置: _helper.tpl
{{- define "my_tpl" -}}
key1: value1
key2: value2
{{- end -}}
dep.yaml
template:
metadata:
annotations:
test: >-
{{ include "my_tpl" . | toJson }}
这应该返回
template:
metadata:
annotations:
test: >-
{"key1":"value1","key2":"value2"}
但它又回来了
template:
metadata:
annotations:
test: >-
"key1:value1\nkey2:value2"
我正在使用 Helm v3。 请问有人有想法吗?
A
define
d 模板 always 生成一个字符串; Helm 特定的 include
函数 always 返回一个字符串。
在您的示例中,您有一个恰好是有效 YAML 的字符串。 Helm 有一个未记录的
fromYaml
函数,可以将字符串转换为对象形式,然后您可以使用 toJson
再次序列化它。
{{ include "my_tpl" . | fromYaml | toJson }}
您可能会发现让模板本身生成正确的 JSON 序列化更容易。 这可能看起来像
{{- define "my_tpl" -}}
{{- $dict := dict "key1" "value1" "key2" "value2" -}}
{{- toJson $dict -}}
{{- end -}}
{{ include "my_tpl" . }}
其中
"key1"
、"value1"
、等可以是任何有效的模板表达式(不需要嵌套 {{ ... }}
)。