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

时间:2019-08-16 15:47:41

标签: kubernetes-helm go-templates

我正在尝试将字典从一个掌舵模板传递到另一个掌舵模板,但已将其解析为被调用模板内的null。

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

我看到myDict在Deployment.yaml内部打印为地图,但在storageNodeAffinity内部,其打印为null。

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

deployment.yaml

{{- $myDict := dict "cpu" "amd" }}
{{- include "storageNodeAffinity" $myDict | indent 6 }}
{{printf "%q" $myDict}}

storage-affinity.tpl

{{- define "storageNodeAffinity" }}
{{/*        {{- $myDict := dict "cpu" "amd" }}*/}}
 {{printf "%q" .myDict}}
        {{- range $key, $val := .myDict }}
        - key: {{ $key }}
          operator: In
          values:
          - {{ $val }}
        {{- end }}
{{- end }}

values.yaml

nodeAffn:
  disktype: "ssd"
  cpu:  intel

2 个答案:

答案 0 :(得分:1)

调用模板时

{{- include "storageNodeAffinity" $myDict -}}

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

{{- define "storageNodeAffinity" }}
{{/* ., not .myDict */}}
{{printf "%q" .}}
{{- range $key, $val := . }}...{{ end -}}
{{- end -}}

答案 1 :(得分:0)

我知道了。技巧是为要在调用模板中使用的变量传递父变量的上下文。所以在这里,我将“ csAffn”作为上下文传递,然后在该上下文中在调用的模板(_additionalNodeAffinity)中使用“ nodeAffn”

_additionalNodeAffinity.tpl
    {{- define "additionalNodeAffinity" }}
            {{- range $key, $val := .nodeAffn }}
            - key: {{ $key }}
              operator: In
              values:
              - {{ $val }}
            {{- end }}
    {{- end }}

deployment.yaml
    {{- include "additionalNodeAffinity" ( .Values.csAffn )

values.yaml
    csAffn:
      nodeAffn:
        disktype: "ssd"
        cpu: "intel"