验证路径值在 helm 模板中是否唯一
Verify if path value is unique in helm template
我正在尝试检查我的路径值是否唯一。这是我的 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 -}}
我处于范围上下文中,因此无法检查其他入口。
你知道怎么做吗
因为(正如您所注意到的)您不能在多个 Ingress 对象之间强制执行唯一性,我可能会接受 "one service declares the same endpoint" 只是 "the same endpoint can be declared multiple times" 的一个特例并且什么也不做。
Helm 模板可以访问名为 Sprig that allows some more general-purpose data structures. If you just want to check that there aren't duplicates, you can use a dictionary:
的支持库
{{- $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 -}}
您可以使用类似的方法仅发出具有给定路径的第一个 Ingress 对象(如果密钥存在则不要 fail
,请在 [=12= 之后立即包含它的模板]).
我正在尝试检查我的路径值是否唯一。这是我的 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 -}}
我处于范围上下文中,因此无法检查其他入口。 你知道怎么做吗
因为(正如您所注意到的)您不能在多个 Ingress 对象之间强制执行唯一性,我可能会接受 "one service declares the same endpoint" 只是 "the same endpoint can be declared multiple times" 的一个特例并且什么也不做。
Helm 模板可以访问名为 Sprig that allows some more general-purpose data structures. If you just want to check that there aren't duplicates, you can use a dictionary:
的支持库{{- $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 -}}
您可以使用类似的方法仅发出具有给定路径的第一个 Ingress 对象(如果密钥存在则不要 fail
,请在 [=12= 之后立即包含它的模板]).