Helm 解析传递到模板文件中的 .Release.Namespace

问题描述 投票:0回答:1

我试图在我的values.yaml 中设置一个var,默认设置为

{{ .Release.Namespace }}
。但是当我使用
--dry-run
检查最终结果时,值是
"{{ .Release.Namespace }}"
,而不是实际的命名空间。

如果我将

ticker.secretNamespace
设置为字符串,即
"foo"
,它就可以工作。如何让这个工作......

谢谢!

values.yaml

ticker:
  secretNamespace: "{{ .Release.Namespace }}"

/tempaltes/prep.yaml

...
      containers:
        - name: prep
          command:
            - /bin/bash
            - -exuc
            - |
              DEBUG A: {{ $.Release.Namespace }}
              {{- $namespace := $.Release.Namespace }}
              DEBUG B: {{ $namespace }}
              {{- with .Values.ticker }}
              {{- if not (eq .secretNamespace $namespace) }}
              DEBUG C: {{ .secretNamespace }}
              kubectl --namespace "{{ .secretNamespace }}" create secret ..."
              {{- end }}
              {{- end }}
...

试运行结果

      containers:
        - name: prep
          command:
            - /bin/bash
            - -exuc
            - |
              DEBUG A: test-ns
              DEBUG B: test-ns
              DEBUG C: {{ .Release.Namespace }}
              kubectl --namespace "{{ .Release.Namespace }}" create secret ...

values.yaml
中尝试了一些不同的符号,但没有成功。

secretNamespace: {{ .Release.Namespace }}
secretNamespace: {{ $.Release.Namespace }}
secretNamespace: .Release.Namespace
secretNamespace: "{{ .Release.Namespace | quote }}"
secretNamespace: "{{ .Release.Namespace | tpl }}"
kubernetes-helm
1个回答
0
投票

我认为你想要实现的目标是不可能的。 Helm 不会将

values.yaml
文件视为要解析的模板。相反,它使用值作为实际模板的输入。因此,在您的情况下,它只是将
secretNamespace:
视为要复制/粘贴的字符串。

如果使用

{{ $.Release.Namespace }}
对您来说还不够,例如您希望允许用户从值或命令行指定名称空间,您可以使用
default
或编写具有更复杂逻辑的帮助器模板。

参见: 默认功能 helm 命名模板

© www.soinside.com 2019 - 2024. All rights reserved.