如何在Helm Chart YAML中复用_helper.tpl函数并转换大小写?
解决Helm Chart复用模板函数并转换大小写的问题
要实现复用自定义模板函数的输出并转换为大写/小写,核心是用Helm的include函数替代template函数。template是直接输出内容的模板动作,无法作为函数参数或管道操作对象;而include会返回模板渲染后的字符串结果,能和upper/lower这类字符串处理函数配合使用。
修正后的实现步骤
- 保留原_helper.tpl模板定义(注:原代码中
$hostnameparts为字符串,join "-"会按字符拆分拼接,若需处理数组可改为$hostnameparts := list "host" "name",此处保持原代码不变):
{{- define "hostnameparts.name" -}} {{$hostnameparts := "hostname" -}} {{- $joinedHostname := join "-" $hostnameparts -}} {{- printf "%s" $joinedHostname -}} {{- end -}}
- 修改Deployment.yaml的引用写法:
apiVersion: apps/v1 kind: Deployment metadata: name: {{ include "hostnameparts.name" . }} labels: host.upper: {{ include "hostnameparts.name" . | upper }} host.lower: {{ include "hostnameparts.name" . | lower }}
原写法报错原因
{{ upper template "hostnameparts.name" . }}:语法错误,template是模板动作,不能作为upper函数的参数。{{ template "hostnameparts.name" . | upper }}:template直接输出内容,无法通过管道将结果传递给upper函数,导致解析失败。
验证效果
执行helm template .后,输出的Deployment元数据示例:
metadata: name: h-o-s-t-n-a-m-e labels: host.upper: H-O-S-T-N-A-M-E host.lower: h-o-s-t-n-a-m-e
内容的提问来源于stack exchange,提问作者Marcel van Heemst
相关产品推荐
相关产品推荐

