我正在尝试在舵图上使用{{ template }}
函数,但是在循环内,该值会出错。
首先是我的_helpers.tpl
:
{{- define "traefik.deployNamespace" -}}
{{ default "kube-system" .Values.deployNamespace }}
{{- end -}}
我可以在所有模板上将变量与{{ template "treafik.deployNamespace }}
一起使用,希望在循环内使用:
# Iterates on allowed namespaces and creates the roles
{{- if .Values.allowedNamespaces }}
{{- range .Values.allowedNamespaces }}
# Rules for namespace: {{ . }}
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: {{ . }}-traefik-ingress-r
namespace: {{ . }}
rules:
- apiGroups:
- ""
resources:
- services
- endpoints
- secrets
verbs:
- get
- list
- watch
- apiGroups:
- extensions
resources:
- ingresses
verbs:
- get
- list
- watch
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: {{ . }}-traefik-ingress-rb
namespace: {{ . }}
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: {{ . }}-traefik-ingress-r
subjects:
- kind: ServiceAccount
name: traefik-ingress-sa
namespace: {{ template "traefik.deployNamespace" . }}
{{- end }}
{{- end }}
我可能做错了$ctx
,但是我不知道该在其中使用什么。
> % helm template .
Error: template: traefik/templates/_helpers.tpl:62:36: executing "traefik.deployNamespace" at <.Values.deployNamespace>: can't evaluate field Values in type strin
答案 0 :(得分:1)
在文件的底部,您可以使用.
当前上下文变量。在{{ range }}...{{ end }}
循环的上下文中,.
被设置为要迭代的列表中的项目。
# `.` in all three of these is the same thing (a string)
name: {{ . }}-traefik-ingress-rb
namespace: {{ . }}
namespace: {{ template "traefik.deployNamespace" . }}
模板通常期望将顶级Helm环境对象作为其参数(具有"Charts"
,"Values"
等的字典类型对象)。您需要将其保存在循环外的变量中,以便可以访问它。
{{- $top := . }}
{{- range .Values.allowedNamespaces }}
...
namespace: {{ template "traefik.deployNamespace" $top }}
...
{{- end }}