在 Helm 中将字典从一个模板传递到另一个模板
Passing dictionary from one template to another in Helm
我正在尝试将字典从一个 helm 模板传递到另一个 helm 模板,但它在被调用模板中解析为 null。
调用模板 - deployment.yaml
调用的模板 - storageNodeAffinity
我看到 myDict 在 deployment.yaml 中打印为地图,但在 storageNodeAffinity 中它打印为 null。
最终我需要从值文件中传递 nodeAffn。
deployment.yaml
{{- $myDict := dict "cpu" "amd" }}
{{- include "storageNodeAffinity" $myDict | indent 6 }}
{{printf "%q" $myDict}}
存储-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
我明白了。诀窍是为要在被调用模板中使用的变量传递父变量的上下文。所以在这里我将 "csAffn" 作为上下文传递,然后在这个上下文中使用 "nodeAffn",在调用的模板 (_additionalNodeAffinity)
中
_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"
调用模板时
{{- include "storageNodeAffinity" $myDict -}}
然后在模板中,无论您作为参数传递什么,都将成为特殊变量 .
。也就是说,.
是字典本身;您不需要使用相对路径来查找其值。
{{- define "storageNodeAffinity" }}
{{/* ., not .myDict */}}
{{printf "%q" .}}
{{- range $key, $val := . }}...{{ end -}}
{{- end -}}
我正在尝试将字典从一个 helm 模板传递到另一个 helm 模板,但它在被调用模板中解析为 null。
调用模板 - deployment.yaml
调用的模板 - storageNodeAffinity
我看到 myDict 在 deployment.yaml 中打印为地图,但在 storageNodeAffinity 中它打印为 null。
最终我需要从值文件中传递 nodeAffn。
deployment.yaml
{{- $myDict := dict "cpu" "amd" }}
{{- include "storageNodeAffinity" $myDict | indent 6 }}
{{printf "%q" $myDict}}
存储-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
我明白了。诀窍是为要在被调用模板中使用的变量传递父变量的上下文。所以在这里我将 "csAffn" 作为上下文传递,然后在这个上下文中使用 "nodeAffn",在调用的模板 (_additionalNodeAffinity)
中_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"
调用模板时
{{- include "storageNodeAffinity" $myDict -}}
然后在模板中,无论您作为参数传递什么,都将成为特殊变量 .
。也就是说,.
是字典本身;您不需要使用相对路径来查找其值。
{{- define "storageNodeAffinity" }}
{{/* ., not .myDict */}}
{{printf "%q" .}}
{{- range $key, $val := . }}...{{ end -}}
{{- end -}}