如何在使用 toyaml 格式化文本之前通过 tpl 处理文本?

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

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 {}

kubernetes-helm
1个回答
1
投票

在 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 }}
© www.soinside.com 2019 - 2024. All rights reserved.