如何在Helm的_helpers.tpl中调用已有helper函数创建新函数
首先明确几个基础问题的答案:
- 同一个
_helpers.tpl文件完全支持定义多个函数,这是Helm模板的标准用法,没有问题。 - 支持在同文件的其他函数中调用已定义的helper函数,你的思路是正确的,只是写法有几处语法错误导致运行失败。
你代码中的错误点如下:
- 空白控制符语法错误:
{{ -中大括号和减号之间不能有空格,必须写成{{-,否则模板无法正常识别空白控制逻辑。 include调用缺失上下文参数:调用redis.fullname模板时必须传递当前上下文.,否则该模板无法获取.Release、.Values等全局变量。- 变量名拼写错误:获取端口的变量应该是
.Values.port,你少写了末尾的s,写成了.Value.port。 - 函数参数优先级问题:需要用括号把
include的完整调用包裹起来,才能将其返回值作为printf的第一个入参,避免模板解析器把后续的端口参数识别为include的入参。
修正后的完整_helpers.tpl代码如下:
{{- define "redis.fullname" -}} {{- if .Values.fullnameOverride -}} {{- .Values.fullnameOverride | trunc 30 | trimSuffix "-" -}} {{- else -}} {{- printf "%s-%s" .Release.Name .Chart.Name | trunc 30 | trimSuffix "-" -}} {{- end -}} {{- end -}} {{- define "redis.connection_string" -}} {{- printf "redis://%s:%s/" (include "redis.fullname" .) .Values.port -}} {{- end -}}
后续你在其他模板文件中使用{{ include "redis.connection_string" . }}即可正常获取生成的Redis连接字符串。
内容的提问来源于stack exchange,提问作者undefined
相关产品推荐
相关产品推荐

