Go 如何在Helm函数中从模板返回贴图对象?

Go 如何在Helm函数中从模板返回贴图对象?,go,yaml,kubernetes-helm,Go,Yaml,Kubernetes Helm,我有一个函数,我想在另一个函数中调用它。我希望它返回一个映射,但是它返回映射的toString表示。它是函数内部的实际映射,而不是函数外部的映射 {{-define app.getSubKey-} {{-$name:=.source} {{-range$key,$value:=.keys} {{-if kindIs int$value} {{-$name=index$name int$value} {{-else} {{-$name=索引$name$value} {{-end} {{-end}

我有一个函数,我想在另一个函数中调用它。我希望它返回一个映射,但是它返回映射的toString表示。它是函数内部的实际映射,而不是函数外部的映射

{{-define app.getSubKey-} {{-$name:=.source} {{-range$key,$value:=.keys} {{-if kindIs int$value} {{-$name=index$name int$value} {{-else} {{-$name=索引$name$value} {{-end} {{-end} {{-如果是字符串$name} {{-trim$name} {{-else} {{$name} {{-end} {{-end} 当我使用{{include app.getSubKey dict source.Values.vars keys list 0}在下面的YAML上调用此函数时,在函数$name内部是一个映射,我使用了kindOf来检查它,但在它的类型字符串之外。我怎样才能把它作为地图退回呢

变量: -名字:什么 价值:废话 确切地说:你的app.getSubKey不是一个函数,它是一个函数,因此,它不会返回任何东西。另一方面,include是一个函数。它将模板名称及其上下文作为参数,并以字符串形式返回呈现的模板。不能更改包含函数返回值的类型

尽管如此,我认为有两种选择:

如果您的目标是从include app.getSubKey调用中获取格式正确的YAML,则仍将其作为字符串使用,请在命名模板中使用toYaml函数,即: {{-define app.getSubKey-} ... {{-else} {{-$name | toYaml | nindent0} {{-end} {{-end} 要获得正确的左对齐YAML,必须使用0

如果要获取实际字典以进行进一步处理,则需要将include回调返回的字符串转换为对象,命名模板中的toYaml仍然是必需的: {{-$d:=dict source.Values.vars键列表0 | include app.getSubKey | fromYaml-} fromYaml函数没有文档记录,因此使用它可能有点风险。我在官方文件中找到的唯一痕迹就是页面上的示例

顺便说一句,app.getSubKey逻辑似乎不正确:对于包含多个元素的密钥列表,它将失败

确切地说:你的app.getSubKey不是一个函数,它是一个函数,因此,它不会返回任何东西。另一方面,include是一个函数。它将模板名称及其上下文作为参数,并以字符串形式返回呈现的模板。不能更改包含函数返回值的类型

尽管如此,我认为有两种选择:

如果您的目标是从include app.getSubKey调用中获取格式正确的YAML,则仍将其作为字符串使用,请在命名模板中使用toYaml函数,即: {{-define app.getSubKey-} ... {{-else} {{-$name | toYaml | nindent0} {{-end} {{-end} 要获得正确的左对齐YAML,必须使用0

如果要获取实际字典以进行进一步处理,则需要将include回调返回的字符串转换为对象,命名模板中的toYaml仍然是必需的: {{-$d:=dict source.Values.vars键列表0 | include app.getSubKey | fromYaml-} fromYaml函数没有文档记录,因此使用它可能有点风险。我在官方文件中找到的唯一痕迹就是页面上的示例

顺便说一句,app.getSubKey逻辑似乎不正确:对于包含多个元素的密钥列表,它将失败


非常感谢。为什么你说app.getSubKey会有多个元素失败?谢谢。为什么说app.getSubKey会因为多个元素而失败?