当我在 hele 的模板文件中传递参数时,值文件中的数据丢失

data from values file lost when I pass parameter in template file in hele

这就是我将变量传递给模板文件的方式

{{ template "fluentd-config" (dict "replica" "bbcc" "pattern" "aabb"  ) }}

这是模板文件

{{- define "fluentd-config" -}}
image: {{ .Values.fluentd.kinesis_image }}
myname: {{ .replica }}
pattern: {{ .pattern }}
{{- end -}}

当我 运行 它时,.Values.fluentd.kinesis_image 消失了。请让我知道如何解决它。谢谢

在 Go text/template 模板中,特殊变量 . 是模板的参数。还要记住,语法 .foo 表示在对象 . 中查找字段 foo。所以在这种情况下,模板参数取代了 Helm 全局对象; .Values 尝试在您作为参数传递的字典中查找它。

一个解决方案是在调用站点也传递 .Values(如果您需要任何其他 top-level Helm 对​​象,您还需要手动传递它们):

{{ template "fluentd-config" (dict "replica" "bbcc" "pattern" "aabb" "Values" .Values) }}

我使用的一个更复杂的模式是将列表作为模板参数传递,然后从中提取字段。您可以使用 Sprig list functions to construct and deconstruct the list. (You could do something similar with dict 来命名参数,这在语法上可能更简单。)

{{- define "fluentd-config" -}}
{{- $top := index . 0 -}}
{{- $params := index . 1 -}}
image: {{ $top.Values.fluentd.kinesis_image }}
myname: {{ $params.replica }}
pattern: {{ $params.pattern }}
{{- end -}}

{{- $params := dict "replica" "bbcc" "pattern" "aabb" -}}
{{ template "fluentd-config" (list . $params) }}