Helm 模板转换为 json

问题描述 投票:0回答:1

我希望能够从如下 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。 请问有人有想法吗?

kubernetes-helm
1个回答
11
投票

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"
可以是任何有效的模板表达式(不需要嵌套
{{ ... }}
)。

© www.soinside.com 2019 - 2024. All rights reserved.