在 Go 模板中使用包含内部范围(helm)

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

我有一个模板,通过

range
迭代渲染多次,并且我可以毫无问题地访问变量外部变量,例如
$.Release.Name
。但是,当我包含模板时,我无法让它工作:

{{ range $key, $val := $.Values.resources }}
      ...
      annotations:
        checksum/config: {{ include (print $.Template.BasePath "/secrets.yaml") . | sha256sum }}
{{ end }}

secrets.yaml

apiVersion: "v1"
kind: "Secret"
metadata:
  name: {{ $.Release.Name }}-secrets

我收到此错误:

Error: render error in "botfront-project/templates/deployment.yaml": template: [filename] :19:28: executing [filename] at <include (print $.Template.BasePath "/secrets.yaml") .>: error calling include: template: .../secrets.yaml:4:19: executing ".../secrets.yaml" at <$.Release.Name>: nil pointer evaluating interface {}.Name

如何访问包含的模板内的变量?

kubernetes-helm go-templates
2个回答
69
投票

TL;博士;

只需将

.
替换为
$
即可使用全局范围而不是您创建的本地范围。

示例:

{{- include "my-chart.labels" $ | nindent 4 }}

说明

根据文档,https://helm.sh/docs/chart_template_guide/control_structs/#modifying-scope-using-with

我们可以使用 $ 从父级访问对象 Release.Name 范围。 当模板执行开始时,$被映射到根范围 并且在模板执行期间它不会改变

使用

range
我们可以更改循环内的范围。事实上,
{{- include "my-chart.labels" . | nindent 4 }}
会调用当前作用域
.

因此,如果您深入研究 helm 文档中的“范围”内容,您最终会找到这部分:https://helm.sh/docs/chart_template_guide/variables/

以这个例子:

{{- range .Values.tlsSecrets }}
apiVersion: v1
kind: Secret
metadata:
  name: {{ .name }}
  labels:
    # Many helm templates would use `.` below, but that will not work,
    # however `$` will work here
    app.kubernetes.io/name: {{ template "fullname" $ }}
    # I cannot reference .Chart.Name, but I can do $.Chart.Name
    helm.sh/chart: "{{ $.Chart.Name }}-{{ $.Chart.Version }}"
    app.kubernetes.io/instance: "{{ $.Release.Name }}"
    # Value from appVersion in Chart.yaml
    app.kubernetes.io/version: "{{ $.Chart.AppVersion }}"
    app.kubernetes.io/managed-by: "{{ $.Release.Service }}"
type: kubernetes.io/tls
data:
  tls.crt: {{ .certificate }}
  tls.key: {{ .key }}
---
{{- end }}

0
投票

在我这边不起作用 头盔版本 version.BuildInfo{版本:“v3.14.2”,GitCommit:“c309b6f0ff63856811846ce18f3bdc93d2b4d54b”,GitTreeState:“干净”,GoVersion:“go1.21.7”}

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