Поскольку (как вы заметили) вы не можете навязать уникальность для нескольких объектов 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
).