如何访问舵图中列表中的单个元素
How to access individual element from a list inside a helm chart
我正在尝试从我的 helmchart 的 values.yaml 文件中访问数组中的单个值。
我的 values.yaml 文件内容
peer_cidr:
- x
- y
- z
从 helm chart 访问:
{{- $dn_count := len .Values.no_of_peers }}
{{- $end := sub $dn_count 1 }}
"routes": [
{{- $root := . -}}
{{ range $i, $dn := until (atoi (printf "%d" (int64 .Values.no_of_peers))) }}
{ "dst": "{{ index $root "Values" "ipv4_routing" "peer_cidr_list" (printf "%d" ($i) ) }}", "gw": "{{ $root.Values.ipv4_routing.gateway}}"}
使用索引函数,我提供了索引,但我面临以下错误
调用索引时出错:无法使用字符串
类型对 slice/array 进行索引
请帮忙
您不需要在 Helm 模板中模拟 C 风格的 for 循环。您可以直接 range
遍历数组并将其内容直接提供给循环体。
{{- $gw := .Values.ipv4_routing.gateway }}
"routes": [
{{- range .Values.ipv4_routing.peer_cidr_list }}
{ "dst": "{{ . }}", "gw": "{{ $gw }}" }
{{- end }}
]
(这不会在写入的 JSON 数组元素之间插入 ,
;您可以在迭代时使用 $i, $dst := range ...
获取索引元素,或者使用 YAML 语法代替上下文允许。)
您编写的模板代码在整数和字符串类型之间有很多类型转换;可能其中大部分是不需要的。您得到的特定错误是因为您在将数组索引提供给 index
之前显式地将其转换为字符串,但该项目是一个数组并使用数字索引。只需删除 printf "%d"
和 atoi
调用也可能会解决问题。
我正在尝试从我的 helmchart 的 values.yaml 文件中访问数组中的单个值。 我的 values.yaml 文件内容
peer_cidr:
- x
- y
- z
从 helm chart 访问:
{{- $dn_count := len .Values.no_of_peers }}
{{- $end := sub $dn_count 1 }}
"routes": [
{{- $root := . -}}
{{ range $i, $dn := until (atoi (printf "%d" (int64 .Values.no_of_peers))) }}
{ "dst": "{{ index $root "Values" "ipv4_routing" "peer_cidr_list" (printf "%d" ($i) ) }}", "gw": "{{ $root.Values.ipv4_routing.gateway}}"}
使用索引函数,我提供了索引,但我面临以下错误 调用索引时出错:无法使用字符串
类型对 slice/array 进行索引请帮忙
您不需要在 Helm 模板中模拟 C 风格的 for 循环。您可以直接 range
遍历数组并将其内容直接提供给循环体。
{{- $gw := .Values.ipv4_routing.gateway }}
"routes": [
{{- range .Values.ipv4_routing.peer_cidr_list }}
{ "dst": "{{ . }}", "gw": "{{ $gw }}" }
{{- end }}
]
(这不会在写入的 JSON 数组元素之间插入 ,
;您可以在迭代时使用 $i, $dst := range ...
获取索引元素,或者使用 YAML 语法代替上下文允许。)
您编写的模板代码在整数和字符串类型之间有很多类型转换;可能其中大部分是不需要的。您得到的特定错误是因为您在将数组索引提供给 index
之前显式地将其转换为字符串,但该项目是一个数组并使用数字索引。只需删除 printf "%d"
和 atoi
调用也可能会解决问题。