如何将ArgoCD场景下values.yaml的字符串转为可迭代列表供Helm遍历
实现方案
你可以通过Helm内置的字符串处理函数直接将空格分隔的字符串转为可遍历的列表,完全兼容ArgoCD ApplicationSet只能传字符串参数的限制,以下是两种常用实现:
方案1:使用splitList切割(适合固定单空格分隔的场景)
先对传入的字符串做首尾去空格处理,再按空格切割为列表:
{{- /* 切割字符串为列表 */}} {{- $urlList := splitList " " (trim .Values.urls) }} {{- /* 遍历列表 */}} {{ range $url := $urlList }} {{ $url }} {{ end }}
方案2:使用正则匹配提取(容错性更高,推荐动态传参场景使用)
如果传参可能出现多空格、制表符等任意空白分隔的情况,可以直接用正则提取所有非空白的url片段,自动忽略无效空白:
{{- /* 匹配所有非空白连续字符,返回列表 */}} {{- $urlList := regexFindAll `\S+` .Values.urls -1 }} {{- /* 遍历列表 */}} {{ range $url := $urlList }} {{ $url }} {{ end }}
如果需要兼容urls为空的场景,可以加一层非空判断:
{{- if .Values.urls }} {{- $urlList := regexFindAll `\S+` .Values.urls -1 }} {{ range $url := $urlList }} {{ $url }} {{ end }} {{- end }}
- 两种方案都不需要修改现有传值逻辑,直接在Helm模板层处理即可。
- 注意不要混淆
split和splitList:split返回的是索引为键的字典,需要列表遍历场景请使用splitList。
内容的提问来源于stack exchange,提问作者Andres Julia
相关产品推荐
相关产品推荐

