Убедитесь, что значение пути уникально в шаблоне руля - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь проверить, является ли значение моего пути уникальным. Это мой пример 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 -}}

Я в контексте диапазона, поэтому я не могу проверить другие входы. У вас есть идеи, как это сделать

1 Ответ

0 голосов
/ 10 апреля 2020

Поскольку (как вы заметили) вы не можете навязать уникальность для нескольких объектов Ingress, я бы, вероятно, согласился с тем, что «одна служба объявляет одну и ту же конечную точку» - это просто конкретный c случай «одна и та же конечная точка может быть объявлена» несколько раз "и ничего не делать.

Шаблоны Helm имеют доступ к библиотеке поддержки, которая называется Sprig , что позволяет использовать более общие структуры данных. Если вы просто хотите проверить, что дубликатов нет, вы можете использовать словарь :

{{- $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, если ключ существует, включите шаблон для него сразу после set).

...