Я ищу решение для контроля входных значений (определенных в values.yaml). Я хотел бы проверить, разрешено ли входное значение.
Пример:
values.yaml
provider: aws
services:
- nginx
- varnish
- php
И в другом файле (может быть _helpers.tpl?)
authorized_providers:
- aws
- azure
authorized_services:
- nginx
- php
И выдать ошибку (пользовательское сообщение, если это возможно), чтобы указать, что входные значения не поддерживаются / не разрешаются.
Моя цель состоит в том, чтобы избежать создания карты конфигурации Kubernetes с неподдерживаемыми значениями (установка helm работает, но эта конфигурация приведет к ошибкам контейнера).
EDIT:
Я наконец-то нашел решение, используя «требуемый» с некоторыми хитростями.
Следуя моему примеру с моим конфигурационным файлом values.yaml.
Я определяю в _helpers.tpl:
{{/*
Define the authorized Value for the parameter: .Values.provider
*/}}
{{- define "authorized.provider" }}
{{- printf "aws,azure" }}
{{- end }}
{{/*
Define the error message if the .Values.provider doesn't respect the authorized.provider condition.
*/}}
{{- define "error.provider" }}
{{- $provider := include "authorized.provider" . }}
{{- printf "Invalid value set for .Values.provider - Must be one of %s" $provider }}
{{- end }}
{{/*
Define the authorized Value for the parameter: .Values.services
*/}}
{{- define "authorized.services" }}
{{- printf "nginx,php" }}
{{- end }}
{{/*
Define the error message if the .Values.services doesn't respect the authorized.services condition.
*/}}
{{- define "error.services" }}
{{- $services := include "authorized.services" . }}
{{- printf "Invalid value set for .Values.services - Authorized values are %s" $services }}
{{- end }}
И затем я создал другой файл: input-values-validation.yaml
{{- $provider := include "authorized.provider" . }}
{{- $errorProvider := include "error.provider" . }}
{{- if not (has .Values.provider (splitList "," $provider)) }}
{{ required $errorProvider .Values.foo }}
{{- end }}
{{- $services := include "authorized.services" . }}
{{- $errorServices := include "error.Services" . }}
{{- $root := . -}}
{{- range .Values.services }}
{{- if not (has . (splitList "," $services)) }}
{{ required $errorServices $root.Values.foo }}
{{- end }}
{{- end }}
Выводить при неправильном вводе значения:
==> Linting
[ERROR] templates/: render error in "templates/input-values-validation.yaml": template: templates/input-values-validation.yaml:12:3: executing "templates/input-values-validation.yaml" at<required $errorServ...>: error calling required: Invalid value set for .Values.services - Authorized values are nginx,php
Информация:
". Values.foo" никогда не должен устанавливаться в файле values.yaml. Я использовал его, чтобы провалить «обязательную» проверку и вызвать ошибку.
Я пытался поместить содержимое файла «input-values-validation.yaml» в файл _helpers.tpl, но при этом возникла ошибка «[ERROR] templates /: сбой шаблона рендеринга: ошибка времени выполнения: неверный адрес памяти или разыменование нулевого указателя ». Похоже, что «обязательная» функция должна использоваться только в файлах yaml.
Итак, с помощью этого решения я могу определить разрешенные значения в файле _helpers.tpl и создать «пользовательское» сообщение об ошибке. И если в будущем я буду поддерживать больше провайдеров / сервисов (мой пример), мне нужно будет только изменить значение в "author.provider" и "authorized.services".