我正在寻找一种控制输入值(在values.yaml中定义)的解决方案。我想检查输入值是否被授权。
示例:
values.yaml
provider: aws
services:
- nginx
- varnish
- php
在另一个文件中(也许是_helpers.tpl?)
authorized_providers:
- aws
- azure
authorized_services:
- nginx
- php
并输入错误消息(如果可能,显示自定义消息),以表明输入值不受支持/授权。
我的目标是避免生成不支持值的Kubernetes配置图(helm安装有效,但此配置会产生容器错误)。
编辑:
我终于找到了使用“必填”的技巧。 按照我的示例使用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 /:渲染模板失败:运行时错误:无效的内存地址或nil指针取消引用” ”。似乎“必需”功能只能在yaml文件中使用。
因此,使用此解决方案,我可以在_helpers.tpl文件中定义授权值,并生成“自定义”错误消息。而且如果将来我支持更多的提供者/服务(以我的示例为例),则只需修改“ authorized.provider”和“ authorized.services”中的值。
答案 0 :(得分:0)
我还没有看到使用helm2做到这一点,至少在扫描official charts(定义{{3}}的尝试中没有)。
最棘手的地方是能够给出一个很好的错误-我所看到的最接近的是common functions in an incubator chart
但是helm3应该使用sprig fail function或schemas
提供这种验证。否则,您可以这样做:
aws:
nginx: false
varnish: false
php: true
以便图表用户使用真/假选择他们想要的服务