Don*_*mmy 4 yaml go kubernetes-helm
我有一个函数想在另一个函数中调用。我希望它返回地图,但它返回toString
地图的表示形式。它是函数内部的实际映射,但不是函数外部的映射。
{{- define "app.getSubKey" -}}
{{- $name := .source }}
{{- range $key, $value := .keys }}
{{- if kindIs "int" $value }}
{{- $name = index $name (int $value) }}
{{- else }}
{{- $name = index $name $value }}
{{- end }}
{{- end }}
{{- if kindIs "string" $name }}
{{- trim $name }}
{{- else }}
{{ $name }}
{{- end }}
{{- end }}
Run Code Online (Sandbox Code Playgroud)
当我在下面的 YAML 上使用 调用这个函数时{{- include "app.getSubKey" (dict "source" .Values.vars "keys" (list 0)) }}
,函数内部$name
是一个映射(我曾经kindOf
检查过这个),但在它外部是某种字符串。我如何才能将其作为地图返回?
vars:
- name: something
value: blah
Run Code Online (Sandbox Code Playgroud)
Maf*_*for 10
准确地说:您的app.getSubKey
不是一个函数,它是一个命名模板,因此,它不会返回任何内容。另一方面,include
是一个函数。它将模板名称及其上下文作为参数,并将渲染的模板作为字符串返回。include
您无法更改函数返回值的类型。
话虽如此,我看到两个选择:
include "app.getSubKey"
(仍为字符串),请在命名模板中使用 toYaml 函数,即:{{- define "app.getSubKey" -}}
...
{{- else }}
{{- $name | toYaml | nindent 0 }}
{{- end }}
{{- end }}
Run Code Online (Sandbox Code Playgroud)
nindent 0
需要正确左对齐 YAML
include
为一个对象(toYaml
命名模板中的仍然是必需的): {{- $d := dict "source" .Values.vars "keys" (list 0) | include "app.getSubKey" | fromYaml -}}
Run Code Online (Sandbox Code Playgroud)
fromYaml函数没有文档记录,因此使用它可能有点冒险。我在官方文档中找到的唯一痕迹是在库图表页面上的示例中。
顺便说一句,逻辑似乎不正确:对于包含多个元素的列表,
app.getSubKey
它将失败。keys
如果app.getSubKey
返回一个数组,则必须使用fromYamlArray
“解码”数据。
归档时间: |
|
查看次数: |
4604 次 |
最近记录: |