1

我正在尝试从我的 helmchart 的 values.yaml 文件中可用的数组访问单个值。我的 values.yaml 文件内容

peer_cidr: 
   - x
   - y
   - z

从掌舵图访问:

        {{- $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}}"}

使用索引函数 iam 提供索引,但 iam 面临以下错误错误调用索引:无法使用字符串类型索引切片/数组

请帮助

4

1 回答 1

1

您不需要在 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"andatoi调用也可能会解决问题。

于 2020-11-28T21:28:16.033 回答