Helm模板调用报错:无法向非函数传递参数求助
Helm模板报错排查与修复
1. 直接触发报错的语法问题
你的deployment.yaml中调用模板时,模板名称未用引号包裹,Helm会将jupyterBaseUrl识别为变量而非模板名称,从而抛出can't give argument to non-function错误。
错误代码:
value: {{- include jupyterBaseUrl . }}
修复后代码:
value: {{- include "jupyterBaseUrl" . }}
2. _helper.tpl中的逻辑问题
除语法错误外,模板逻辑存在两处不合理之处:
hasKey $key $placeHolder用法错误:hasKey的参数应为「字典」和「键」,你当前用字典的key(如cluster1)作为第一个参数,完全不符合语法。- 遍历整个cluster字典效率低下:无需循环遍历,直接通过匹配的key取值即可。
修复后的_helper.tpl代码:
{{- define "jupyterBaseUrl" -}} {{- $placeHolder := .Values.placeHolder }} {{- if not $placeHolder }} {{- $ConfigMap := lookup "v1" "ConfigMap" .Release.Namespace "testmap" }} {{- if $ConfigMap }} {{- $clusterName := index $ConfigMap.data "cluster" }} {{- if hasKey .Values.cluster $clusterName }} {{- index .Values.cluster $clusterName }} {{- end }} {{- end }} {{- end }} {{- end -}}
3. 额外注意事项
- 执行Helm安装前,需确保
testmapConfigMap已存在于目标命名空间,否则lookup会返回空值,最终无输出。 - 若需处理集群名称不匹配的场景,可添加默认值逻辑,例如在
hasKey判断的else分支中输出默认区域。
内容的提问来源于stack exchange,提问作者devops_coder
相关产品推荐
相关产品推荐

