验证路径值在 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= 之后立即包含它的模板]).