如何 return 来自 Kubernetes Helm 函数的复杂(dict)值?

How to return complex (dict) value from Kubernetes Helm function?

我想从 Helm 函数中 return 一个复杂的值(dict),这样我就可以在模板或其他函数中做进一步的处理。

我定义了这个函数:

{{- define "return-dict-function" -}}
key1: value1
key2: value2
{{- end -}}

并且我可以在我的模板中输出函数值:

{{ include "return-dict-function" . | nindent 2 }}

但是我怎样才能对数据做进一步的处理呢?

return复数值有几种解法,做进一步处理:

1) 函数 returns 纯 yaml

从问题中获取示例函数 return-dict-function。 如果你使用 fromYaml 你会得到 dict:

{{ $dict := include "return-dict-function" . | fromYaml }}
type: {{ $dict | typeOf }}
{{- range $key, $value := $dict }}
simple-function-{{ $key }} : processed-value-{{ $value }}
{{- end -}}

输出:

type: map[string]interface {}
simple-function-key1 : processed-value-value1
simple-function-key2 : processed-value-value2

2) 函数需要return dict

a) 序列化为 json

如果你有一个应该 returned 的字典,你可以用 toJson

序列化这个字典
{{- define "return-dict-function-json" -}}
{{- $result := dict "key1" "value1" "key2" "value2" }}
{{- $result | toJson  -}}
{{- end -}}

稍后您将使用 fromJson

进行反序列化
{{ $dict := include "return-dict-function-json" . | fromJson }}
{{- range $key, $value := $dict }}
json-function-{{ $key }} : processed-value-{{ $value }}
{{- end -}}

b) 序列化为 yaml

你也可以用toYaml

序列化dict
{{- define "return-dict-function-yaml" -}}
{{- $result := dict "key1" "value1" "key2" "value2" }}
{{- $result | toYaml  -}}
{{- end -}}

然后你需要用fromYaml

反序列化
{{ $dict := include "return-dict-function-yaml" . | fromYaml }}
{{- range $key, $value := $dict }}
yaml-function-{{ $key }} : processed-value-{{ $value }}
{{- end -}}

注释和进一步阅读