我正在尝试将字典从一个掌舵模板传递到另一个掌舵模板,但已将其解析为被调用模板内的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
答案 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"