Golang模板(helm)迭代地图列表

Vic*_*rac 4 templates yaml go kubernetes kubernetes-helm

我正在使用helm生成kubernetes yamls.

我的values.yaml看起来像这样:

...
jobs:
  - nme: job1
    command: [sh, -c, "/app/deployment/start.sh job1"]
    activeDeadlineSeconds: 600
  - name: job2
    command: [sh, -c, "/app/deployment/start.sh job2"]
    activeDeadlineSeconds: 600
...
Run Code Online (Sandbox Code Playgroud)

templates/jobs.yaml

{{ range $i, $job := .Values.jobs -}}
apiVersion: batch/v1
kind: Job
metadata:
  name: {{ template "name" . }}-{{ $job.name }}
  labels:
    chart: "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}"
spec:
  activeDeadlineSeconds: {{ $job.activeDeadlineSeconds }}
  template:
    metadata:
      labels:
        app: {{ template "name" . }}-{{ $job.name }}
    spec:
      containers:
      - name: {{ .Chart.Name }}
        image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
        imagePullPolicy: {{ .Values.image.pullPolicy }}
        command: {{ $job.command }}
        env:
{{ toYaml .Values.service.env | indent 10 }}
        ports:
        - containerPort: {{ .Values.service.internalPort }}
{{- end }}
Run Code Online (Sandbox Code Playgroud)

Helm失败了这个错误:

Error: UPGRADE FAILED: render error in "app1/templates/jobs.yaml": template: app1/templates/_helpers.tpl:6:18: executing "name" at <.Chart.Name>: can't evaluate field Name in type interface {}
Run Code Online (Sandbox Code Playgroud)

当我看到_helpers.tpl时:

{{- define "name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
{{- end -}}
Run Code Online (Sandbox Code Playgroud)

如果我删除范围循环并在我的$ job中引用jobs.yaml,那么_helpers.tpl name模板工作正常.当我添加循环时,它会失败.

这似乎是内环路,所有点.的管道,它包含的范围为.Chart.Values,被重新分配到别的东西.

我究竟做错了什么?

Tob*_*yer 7

在循环内部,值的值.设置为当前元素,您必须使用它$.Chart.Name来访问您的数据.

我问了一个类似的问题,我认为答案/sf/answers/3131420981/也会回答你的问题.