在 Helm 中将字典从一个模板传递到另一个模板

use*_*902 4 go-templates kubernetes-helm

我试图将字典从一个舵模板传递到另一个模板,但它在被调用的模板中解析为 null。

调用模板-deployment.yaml
调用模板-storageNodeAffinity

我看到 myDict 在 deployment.yaml 中打印为地图,但在 storageNodeAffinity 中打印为 null。

最终我需要从值文件传递nodeAffn。

部署.yaml

{{- $myDict := dict "cpu" "amd" }}
{{- include "storageNodeAffinity" $myDict | indent 6 }}
{{printf "%q" $myDict}}
Run Code Online (Sandbox Code Playgroud)

存储亲和力.tpl

{{- define "storageNodeAffinity" }}
{{/*        {{- $myDict := dict "cpu" "amd" }}*/}}
 {{printf "%q" .myDict}}
        {{- range $key, $val := .myDict }}
        - key: {{ $key }}
          operator: In
          values:
          - {{ $val }}
        {{- end }}
{{- end }}
Run Code Online (Sandbox Code Playgroud)

值.yaml

nodeAffn:
  disktype: "ssd"
  cpu:  intel
Run Code Online (Sandbox Code Playgroud)

Dav*_*aze 5

当你调用模板时

{{- include "storageNodeAffinity" $myDict -}}
Run Code Online (Sandbox Code Playgroud)

然后在模板中,您作为参数传递的任何内容都将成为特殊变量.。也就是说,.是字典本身;您不需要使用相对路径来查找其值。

{{- define "storageNodeAffinity" }}
{{/* ., not .myDict */}}
{{printf "%q" .}}
{{- range $key, $val := . }}...{{ end -}}
{{- end -}}
Run Code Online (Sandbox Code Playgroud)