我正在尝试用我在values.yaml中的值构建configmap数据。
CASE 1:
values.yaml:
dns_domains: abc xyz
dns_servers: IP1 IP2 IP3我需要configmap数据,如下所示,用于上面的values.yaml:
apiVersion: v1
kind: ConfigMap
metadata:
name: Corefile
data:
abc:53 {
log
errors
cache 30
forward . IP1 IP2 IP3
}
xyz:53 {
log
errors
cache 30
forward . IP1 IP2 IP3
}CASE 2:
values.yaml:
dns_domains: abc xyz
dns_servers:
or
dns_domains: abc xyz 我需要configmap数据,如下所示,用于上面的values.yaml:
apiVersion: v1
kind: ConfigMap
metadata:
name: Corefile
data:
abc:53 {
log
errors
cache 30
}
xyz:53 {
log
errors
cache 30
}我尝试了如下所示,并被塞进了如何“向前”行使所有值都在范围内。
{{- range $domain := splitList " " .Values.dns_int_domains }}
$domain:53 {
log
errors
cache 30
{{- range $dns_int_server := splitList " " .Values.dns_int_servers }}
{{- if $dns_int_server }}
forward . $dns_int_server # how to make this line to have all values in dns_int_server list
{{- end }}
}
{{- end }}注意:我们应该在服务器块中只有一个前向插件。也就是说,下面是不允许的
abc:53 {
forward . IP1
forward . IP2
}如果有人帮我的话,我会很感激的。提前谢谢!
发布于 2022-04-07 19:48:08
使用当前的格式,.Values.dns_servers已经是一个带有空格分隔值的字符串,这是您想要的格式。你不需要把它分割成一个列表,然后再写一遍。
{{- if .Values.dns_servers }}
forward . {{ .Values.dns_servers }}
{{- end }}Helm包含(几乎所有) 小枝库中的扩展函数,并不是所有扩展函数都在Helm文档中。如果您确实将其作为列表,则有一个join模板函数可以将它们组合在一起。
{{- $dns_servers := splitList " " .Values.dns_servers }}
{{- if $dns_servers }}
forward . {{ join " " $dns_servers }}
{{- end }}与空格分隔的字符串不同,如果在values.yaml文件中使用本机YAML列表,您可能会发现更容易操作这些值。任何有效的YAML列表语法都可以在这里工作,包括将整个列表放在一行的格式。
# values.yaml, reformatted to use YAML lists and snakeCase names
dnsDomains: [abc,xyz]
dnsServers:
- 10.10.10.10
- 10.10.10.11
- 10.10.20.20作为最后一种选择,如果您对空格处理非常小心,您可以将模板放在任何您想要的位置,甚至在行的中间。
{{- with .Values.dnsServers }}
forward .
{{- range . }} {{ . }}{{ end }}
{{- end }}使用最后一个示例的重要技巧是,在-之前的range空白控件也会在前一行的末尾使用换行符。然后,在range块中,对每个元素重复一次,没有空格控制,就有一个空格和一个list元素。最后,在最后一个end之后,有一个换行符。
您可以使用helm template反复检查它,这将验证YAML语法并打印出呈现的内容(使用--debug,即使它是无效的YAML也会打印出来)。
https://stackoverflow.com/questions/71778709
复制相似问题