我试图检查我的路径值是否是唯一的。这是我的value.yml示例:
ingresses:
- name: ingress-1
path: /route2
host: example.com
- name: ingress-2
path: /route2
host: example.com在本例中,我希望排除或连接第二条路由。这是我的ingress.yml模板:
{{- range $ingress := .Values.ingresses -}}
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: sampleName
labels:
app: sampleName
deploymentStrategy: sampleStrategy
spec:
rules:
- host: "{{ $ingress.host }}"
http:
paths:
- backend:
serviceName: SampleName
servicePort: 80
path: /sampleApp/{{ $ingress.path }}
---
{{- end -}}我在范围内,所以我不能再检查其他的入口了。你知道怎么做吗?
发布于 2020-04-10 13:07:51
因为(正如您注意到的)您不能在多个宏对象之间强制执行唯一性,我可能会接受“一个服务声明同一个端点”只是“同一个端点可以被多次声明”的一个特定情况,而什么也不做。
Helm模板可以访问一个名为小枝的支持库,它允许一些更通用的数据结构。如果您只想检查没有重复项,可以使用字典
{{- $paths := dict -}}
{{- range $ingress := .Values.ingresses -}}
{{- if hasKey $paths $ingress.path -}}
{{- printf "Duplicate ingress path %s" $ingress.path | fail -}}
{{- else -}}
{{- $_ := set $paths $ingress.path $ingress.path -}}
{{- end -}}
{{- end -}}您可以使用类似的方法只发出具有给定路径的第一个include对象(如果存在密钥,则不要发出fail,请在set之后立即包含该对象的模板)。
https://stackoverflow.com/questions/61140763
复制相似问题