我试图实现的是在入口图中的hosts字段中设置一组值,类似于:
spec:
tls:
hosts:
- domain1
- domain2
- domain3
我面临的问题是,我有一个默认域(domain1(和一个非固定长度的额外域阵列(domain2,domain3(。
我尝试的是沿着默认值迭代数组
- hosts:
- {{.Values.domain}}
{{- range $key, $val := .Values.regionalDomain }}
- {{ $val }}
{{- end }}
但我得到的错误类似于:spec.tls[0].hosts: Invalid value: "domain1 - domain2 - domain3": a DNS-1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')
我发现在可能的情况下使用模板中的数据比尝试格式化yaml更容易。
CCD_ 2可以将字典中的信息提取到列表中prepend
可以添加到列表中toJson
处理格式化。
hosts: {{ prepend (values .Values.regionalDomain) .Values.domain | toJson }}
YAML对空格非常敏感,与Helm/Go模板的交互可能有点棘手。看起来range
循环内的项目上有两个额外的空格,所以您应该能够更改:
- hosts:
- {{.Values.domain}}
{{- range $key, $val := .Values.regionalDomain }}
{{/* The - lines up with the above -- two fewer indent spaces */}}
- {{ $val }}
{{- end }}
模板并没有真正意识到YAML语法,而是非常字面地处理空间。大括号内带有连字符的{{- ...
将删除模板一侧或另一侧的所有空白,包括换行符和空格,对此进行推理可能需要有意识地计算换行符。(默认域后面没有换行符,但在range
循环中的每个项目之前和其end
之后都有换行符,这是正确的换行符数量。(
如果您遇到一个YAML解析错误,那么使用您的值集运行helm template
,找到有问题的项,并确保生成的YAML看起来确实正确(没有缺少换行符,缩进对齐(可能会很有用。