Входные значения управления рулем - PullRequest
0 голосов
/ 25 января 2019

Я ищу решение для контроля входных значений (определенных в 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".

1 Ответ

0 голосов
/ 25 января 2019

Я не видел, чтобы это было сделано с помощью helm2, по крайней мере, не при сканировании официальных диаграмм , попытки определить общие функции на диаграмме инкубатора .

Самый хитрый момент - дать хорошую ошибку - ближе всего я видел функцию сбоя sprig

Но helm3 должен обеспечивать такую ​​проверку, либо с схемы или lua

В противном случае, возможно, вы могли бы сделать это следующим образом:

aws:
  nginx: false
  varnish: false
  php: true

Так, чтобы пользователь диаграммы выбирал, какие услуги ему нужны с помощьюистина / ложь

...