如何使用范围函数将值保持在掌舵的同一行
How to use range function to keep values in same line in helm
我正在尝试根据 values.yaml 中的值构建配置映射数据。
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
}
如果有人帮助我,我将不胜感激。提前致谢!!!
根据您当前的格式,.Values.dns_servers
已经是一个具有 space-separated 值的字符串,这就是您想要的格式。你不需要把它拆分成一个列表再写出来。
{{- if .Values.dns_servers }}
forward . {{ .Values.dns_servers }}
{{- end }}
Helm 包含(几乎所有)Sprig library, not all of which are in the Helm documentation proper. If you do have this as a list, there is a join
模板函数中的扩展函数,可以将它们组合在一起。
{{- $dns_servers := splitList " " .Values.dns_servers }}
{{- if $dns_servers }}
forward . {{ join " " $dns_servers }}
{{- end }}
如果您在 values.yaml
文件中使用本机 YAML 列表,您可能会发现操作这些值比 space-separated 字符串更容易。任何有效的 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
作为最后一个选项,如果您对白色space 处理非常小心,您可以将模板放在任何您想要的地方,甚至在一行的中间。
{{- with .Values.dnsServers }}
forward .
{{- range . }} {{ . }}{{ end }}
{{- end }}
最后一个示例的重要技巧是 -
whitespace 控件在 range
之前也消耗了上一行末尾的换行符。然后在 range
块内,每个元素重复一次并且没有白色 space 控件,有一个 space 和一个列表元素。最后在最后一个 end
之后有一个换行符。
你可以 double-check 使用 helm template
,这将验证 YAML 语法并打印出呈现的内容(使用 --debug
它会打印出来,即使它是无效的 YAML) .
我正在尝试根据 values.yaml 中的值构建配置映射数据。
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
}
如果有人帮助我,我将不胜感激。提前致谢!!!
根据您当前的格式,.Values.dns_servers
已经是一个具有 space-separated 值的字符串,这就是您想要的格式。你不需要把它拆分成一个列表再写出来。
{{- if .Values.dns_servers }}
forward . {{ .Values.dns_servers }}
{{- end }}
Helm 包含(几乎所有)Sprig library, not all of which are in the Helm documentation proper. If you do have this as a list, there is a join
模板函数中的扩展函数,可以将它们组合在一起。
{{- $dns_servers := splitList " " .Values.dns_servers }}
{{- if $dns_servers }}
forward . {{ join " " $dns_servers }}
{{- end }}
如果您在 values.yaml
文件中使用本机 YAML 列表,您可能会发现操作这些值比 space-separated 字符串更容易。任何有效的 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
作为最后一个选项,如果您对白色space 处理非常小心,您可以将模板放在任何您想要的地方,甚至在一行的中间。
{{- with .Values.dnsServers }}
forward .
{{- range . }} {{ . }}{{ end }}
{{- end }}
最后一个示例的重要技巧是 -
whitespace 控件在 range
之前也消耗了上一行末尾的换行符。然后在 range
块内,每个元素重复一次并且没有白色 space 控件,有一个 space 和一个列表元素。最后在最后一个 end
之后有一个换行符。
你可以 double-check 使用 helm template
,这将验证 YAML 语法并打印出呈现的内容(使用 --debug
它会打印出来,即使它是无效的 YAML) .