2017-07-19 138 views
0

我正在使用helm来生成kubernetes yamls。Golang模板(掌舵)遍历地图列表

我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 
... 

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 }} 

掌舵得到这个错误:

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

当我看着_helpers.tpl:

{{- define "name" -}} 
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} 
{{- end -}} 

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

看起来像在循环中,包含.Chart.Values的范围的所有点的.管道被重新分配给其他内容。

我在做什么错?

回答

0

我结束了拯救全球范围内,然后更新所有我引用的是这样的:

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