为什么这不会改变 Helm 范围循环中变量的值?

Don*_*mmy 4 yaml go-templates kubernetes-helm

我有这个功能:

{{- define "myapp.getSubKey" -}}
  {{- $map := .source }}
  {{ "Before: " }}{{ $map }}
  {{- range $key, $value := .keys }}
    {{- if kindIs "int" $value }}
      {{- $map := index $map (int $value) }}
      {{ "After: " }}{{ $map }}
    {{- end }}
  {{- end }}
  {{ $map }}
{{- end }}
Run Code Online (Sandbox Code Playgroud)

我用它来称呼它include "myapp.getSubKey" (dict "source" .Values.vars "keys" list(0))

这打印出:

Before: [map[name:MYSQL_ROOT_PASSWORD valueFrom:map[secretKeyRef:map[key:db-pass name:db-creds]]] map[name:MYSQL_ROOT_USER valueFrom:map[secretKeyRef:map[key:db-user name:db-creds]]]]

After: [map[name:MYSQL_ROOT_PASSWORD valueFrom:map[secretKeyRef:map[key:db-pass name:db-creds]]]

[map[name:MYSQL_ROOT_PASSWORD valueFrom:map[secretKeyRef:map[key:db-pass name:db-creds]]] map[name:MYSQL_ROOT_USER valueFrom:map[secretKeyRef:map[key:db-user name:db-creds]]]]
Run Code Online (Sandbox Code Playgroud)

因此,您可以看到它正确地向下导航并在语句$map内进行更改if,但是当它退出循环时,它会返回到循环之前的状态。

如何更改“全局”值?

Kam*_*san 9

尝试在内部使用运算符=而不是赋值运算符。当您指定with时,范围仅限于。:=if-block$map:=if-block

{{- define "myapp.getSubKey" -}}
  {{- $map := .source }}
  {{ "Before: " }}{{ $map }}
  {{- range $key, $value := .keys }}
    {{- if kindIs "int" $value }}
      {{- $map = index $map (int $value) }} // <------- here
      {{ "After: " }}{{ $map }}
    {{- end }}
  {{- end }}
  {{ $map }}
{{- end }}
Run Code Online (Sandbox Code Playgroud)

=自 以来支持该运算符helm v2.13.0

  • 谢谢,我不知道有赋值与初始化运算符。 (3认同)