Argo ApplicationSet Git生成器的命名空间条件模板实现咨询
Argo ApplicationSet Git生成器的命名空间条件模板实现咨询
这个需求完全可以通过Go模板的内置函数组合来实现,我来给你拆解一下思路和最终的写法:
首先,我们可以利用Go模板的contains、split函数加上条件判断,来实现你要的分支逻辑。直接修改你的namespace模板即可:
destination: server: https://kubernetes.default.svc namespace: '{{- $appSegment := index .path.segments 1 -}}{{- if (contains ":" $appSegment) -}}{{- index (split $appSegment ":") 1 -}}{{- else -}}{{- $appSegment -}}{{- end -}}'
给你解释一下每一步的作用:
- 先把路径的第二个分段(也就是
apps/*/yamls里的*部分)存到$appSegment变量里,避免重复写长表达式,让模板更清晰。 - 用
contains ":" $appSegment检查这个分段里是否包含冒号。 - 如果包含冒号,就用
split $appSegment ":"把字符串按冒号分割成一个切片,然后取切片的第2个元素(索引为1),也就是冒号后面的内容作为命名空间。 - 如果没有冒号,直接使用原来的分段内容作为命名空间,和你之前的逻辑保持一致。
另外,模板里的{{- ... -}}语法是用来移除模板渲染时产生的多余空格和换行的,确保生成的命名空间是干净的字符串,不会有意外的空白字符。
你可以测试一下几个场景:
- 对于
apps/app1:somename/yaml/,最终命名空间会是somename - 对于
apps/app2:someothername/yaml/,最终命名空间会是someothername - 对于
apps/app3/yaml/,最终命名空间还是app3,完全符合你的需求。
备注:内容来源于stack exchange,提问作者Jose
相关产品推荐
相关产品推荐

