如何访问舵图中列表中的单个元素

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 调用也可能会解决问题。