如何从 Kubernetes Helm 函数返回复杂(dict)值?

Mat*_*s M 3 kubernetes kubernetes-helm

我想从 Helm 函数返回一个复数 (dict),以便我可以在模板或其他函数中进行进一步处理。

我定义了这个函数:

{{- define "return-dict-function" -}}
key1: value1
key2: value2
{{- end -}}
Run Code Online (Sandbox Code Playgroud)

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

{{ include "return-dict-function" . | nindent 2 }}
Run Code Online (Sandbox Code Playgroud)

但如何对数据进行进一步处理呢?

Mat*_*s M 5

有几种解决方案可以返回复数值并进行进一步处理:

1)函数返回纯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 -}}
Run Code Online (Sandbox Code Playgroud)

输出:

type: map[string]interface {}
simple-function-key1 : processed-value-value1
simple-function-key2 : processed-value-value2
Run Code Online (Sandbox Code Playgroud)

2)函数需要返回dict

a) 序列化为json

如果您有一个应该返回的字典,您可以使用以下命令序列化该字典toJson

{{- define "return-dict-function-json" -}}
{{- $result := dict "key1" "value1" "key2" "value2" }}
{{- $result | toJson  -}}
{{- end -}}
Run Code Online (Sandbox Code Playgroud)

稍后你将反序列化fromJson

{{ $dict := include "return-dict-function-json" . | fromJson }}
{{- range $key, $value := $dict }}
json-function-{{ $key }} : processed-value-{{ $value }}
{{- end -}}
Run Code Online (Sandbox Code Playgroud)

b) 序列化为 yaml

您还可以使用以下命令序列化字典toYaml

{{- define "return-dict-function-yaml" -}}
{{- $result := dict "key1" "value1" "key2" "value2" }}
{{- $result | toYaml  -}}
{{- end -}}
Run Code Online (Sandbox Code Playgroud)

然后你需要反序列化fromYaml

{{ $dict := include "return-dict-function-yaml" . | fromYaml }}
{{- range $key, $value := $dict }}
yaml-function-{{ $key }} : processed-value-{{ $value }}
{{- end -}}
Run Code Online (Sandbox Code Playgroud)

注释和进一步阅读