如何在Helm模板中为MongoDB连接字符串添加逗号分隔符?
Helm模板生成MongoDB集群连接字符串的正确写法
针对你遇到的mongos节点间缺少逗号的问题,有两种简洁的解决方式,都能支持任意数量的mongos节点:
方法一:使用join+map函数(推荐,代码更简洁)
修改Template.yaml中的uri生成逻辑,先将每个mongos节点格式化为host:27017,再用逗号连接所有节点,最后拼接完整的连接字符串:
uri: "mongodb://{{- join "," (map (printf "%s:27017") .Values.mongos) -}}/?authSource=admin"
逻辑说明:
map (printf "%s:27017") .Values.mongos:遍历mongos数组,将每个节点名格式化为节点名:27017的格式,生成新数组join "," ...:用逗号将新数组中的元素连接成字符串- 最后拼接前缀
mongodb://和后缀/?authSource=admin,并加上引号符合格式要求
方法二:带索引的range循环
通过判断元素索引,给除第一个节点外的其他节点前添加逗号:
uri: "mongodb://{{- range $index, $value := .Values.mongos -}} {{- if ne $index 0 -}},{{- end -}} {{- printf "%s:27017" $value -}} {{- end -}}/?authSource=admin"
逻辑说明:
range $index, $value := .Values.mongos:遍历数组时同时获取元素索引和值if ne $index 0:如果不是第一个元素(索引不为0),则先输出逗号- 再输出格式化后的
host:port字符串
两种方法最终都会生成符合要求的连接字符串,比如当mongos数组新增节点后,会自动用逗号分隔,无需修改模板逻辑。
内容的提问来源于stack exchange,提问作者R2D2
相关产品推荐
相关产品推荐

