Helm-如何在循环中调用辅助函数?

时间:2018-11-05 01:18:17

标签: kubernetes-helm

我正在尝试定义n个StatefulSets,其中n是所需的节点数,在values.yaml中将其设置为nodeCount。我收到一个似乎与范围相关的错误,但似乎无法整理出范围。我在这里想念东西吗?

我的StatefulSet .yaml文件中的相关内容:

{{ range $k, $v := until ( .Values.nodeCount | int) }}
---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: {{ $.Release.Name }}  
  labels:
    app: {{ $.Release.Name }}
    chart: {{ template "myapp-on-kube.chart" . }}  #here's my call to _helpers
    release: {{ $.Release.Name }}
    heritage: {{ $.Release.Service }}

_helpers.tpl中的相关内容:

{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "myapp-on-kube.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
{{- end -}}

我得到的错误:

Error: render error in "myapp-on-kube/templates/statefulset.yaml": template: myapp-on-kube/templates/_helpers.tpl:31:25: executing "myapp-on-kube.chart" at <.Chart.Name>: can't evaluate field Chart in type int

1 个答案:

答案 0 :(得分:2)

几个Go模板构造将.的含义更改为被循环的对象,并且您需要使用$来引用初始值。您的大多数模板正确地引用了例如 $.Release.Name,但是当您调用帮助程序模板时,它使用的是当前上下文而不是根值。更改:

chart: {{ template "myapp-on-kube.chart" $ }}

(请注意,您所拥有的模板将声明多个具有相同名称的StatefulSet,但效果不佳。我可能只用replicas: {{ .Values.nodeCount }}创建一个StatefulSet。)