helm 模版或 golang 模版,如何实现 Java 中 stream.map.join 的效果?

2022-08-18 20:04:55 +08:00
 ql562482472

我的 values 文件中定义了一些接口,这些接口应当被转发给一个服务

values.yaml:

path:

如何实现最终渲染出这样的效果:

router-swap: rule: "PathPrefix(/aa)||PathPrefix(/bb)||PathPrefix(/cc)" service: swap-service middlewares:

我已经看到了 join 但是我不知道如何使 list 中的每个元素增加 PathPrefix router-swap: rule: {{ join "||" .Values.path }} service: swap-service middlewares:

1042 次点击
所在节点    Go 编程语言
3 条回复
ql562482472
2022-08-18 20:06:19 +08:00
如果是 java list.stream().map(it->"PathPrefix(it)").collect(Collectors.join("||"))就能得到效果
但是 go 语言我找了半天好像没有相应的函数
jaynos
2022-08-19 15:38:00 +08:00
在 Go 模板里比较麻烦一点,我想到两个方式实现你可以参考下:
```plain
// templates/_helpers.tpl

{{- define "rules.join" -}}
{{- $rules := list "" -}}
{{- range . -}}
{{- $rules = append $rules (printf "PathPrefix(%q)" .) -}}
{{- end -}}
{{- join "||" (compact $rules) -}}
{{- end -}}
```

```plain
// templates/deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "joinexample.fullname" . }}
annotations:
oneline: '{{- range (initial .Values.paths) -}} {{- printf "PathPrefix(%q)||" . -}} {{- end -}} {{- printf "PathPrefix(%q)" (last .Values.paths) -}}'
byblock: {{ include "rules.join" .Values.paths }}
```
ql562482472
2022-08-19 16:08:47 +08:00
@jaynos Thanks ! 我认为第一种更干净一点,我采用第一种了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/873822

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX