首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用range函数将值保持在舵机中的同一行

如何使用range函数将值保持在舵机中的同一行
EN

Stack Overflow用户
提问于 2022-04-07 08:25:26
回答 1查看 975关注 0票数 0

我正在尝试用我在values.yaml中的值构建configmap数据。

代码语言:javascript
复制
CASE 1:
values.yaml:
  dns_domains: abc xyz 
  dns_servers: IP1 IP2 IP3

我需要configmap数据,如下所示,用于上面的values.yaml:

代码语言:javascript
复制
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
   }
代码语言:javascript
复制
CASE 2:
values.yaml:
  dns_domains: abc xyz 
  dns_servers: 
or 
  dns_domains: abc xyz 

我需要configmap数据,如下所示,用于上面的values.yaml:

代码语言:javascript
复制
apiVersion: v1
kind: ConfigMap
metadata:
  name: Corefile
data:
   abc:53 {
     log
     errors
     cache 30
   }
   xyz:53 {
     log
     errors
     cache 30
   }

我尝试了如下所示,并被塞进了如何“向前”行使所有值都在范围内。

代码语言:javascript
复制
{{- 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 }}

注意:我们应该在服务器块中只有一个前向插件。也就是说,下面是不允许的

代码语言:javascript
复制
abc:53 {
  forward . IP1
  forward . IP2
}

如果有人帮我的话,我会很感激的。提前谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-07 19:48:08

使用当前的格式,.Values.dns_servers已经是一个带有空格分隔值的字符串,这是您想要的格式。你不需要把它分割成一个列表,然后再写一遍。

代码语言:javascript
复制
{{- if .Values.dns_servers }}
forward . {{ .Values.dns_servers }}
{{- end }}

Helm包含(几乎所有) 小枝库中的扩展函数,并不是所有扩展函数都在Helm文档中。如果您确实将其作为列表,则有一个join模板函数可以将它们组合在一起。

代码语言:javascript
复制
{{- $dns_servers := splitList " " .Values.dns_servers }}
{{- if $dns_servers }}
forward . {{ join " " $dns_servers }}
{{- end }}

与空格分隔的字符串不同,如果在values.yaml文件中使用本机YAML列表,您可能会发现更容易操作这些值。任何有效的YAML列表语法都可以在这里工作,包括将整个列表放在一行的格式。

代码语言:javascript
复制
# 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

作为最后一种选择,如果您对空格处理非常小心,您可以将模板放在任何您想要的位置,甚至在行的中间。

代码语言:javascript
复制
{{- with .Values.dnsServers }}
forward .
{{- range . }} {{ . }}{{ end }}
{{- end }}

使用最后一个示例的重要技巧是,在-之前的range空白控件也会在前一行的末尾使用换行符。然后,在range块中,对每个元素重复一次,没有空格控制,就有一个空格和一个list元素。最后,在最后一个end之后,有一个换行符。

您可以使用helm template反复检查它,这将验证YAML语法并打印出呈现的内容(使用--debug,即使它是无效的YAML也会打印出来)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71778709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档