<.Chart.Name>:无法评估类型字符串中的字段 Chart

RuB*_*iCK 6 go-templates kubernetes-helm

当我部署以下内容时,出现此错误:

{{- if .Values.front.ingress.enabled -}}
{{- $fullName := include "marketplace.fullname" . -}}
{{- $ingressPaths := .Values.front.ingress.paths -}}
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: {{ $fullName }}-{{ .Values.environment }}-front
  labels:
    app.kubernetes.io/name: {{ include "marketplace.name" . }}-{{ .Values.front.name }}
    helm.sh/chart: {{ include "marketplace.chart" . }}
    app.kubernetes.io/instance: {{ .Release.Name }}-{{ .Values.front.name }}
    app.kubernetes.io/managed-by: {{ .Release.Service }}
  {{- with .Values.front.ingress.annotations }}
  annotations:
    {{- toYaml . | nindent 4 }}
  {{- end }}
spec:
{{- if .Values.front.ingress.tls }}
  tls:
  {{- range .Values.front.ingress.tls }}
    - hosts:
      {{- range .hosts }}
        - {{ . | quote }}
      {{- end }}
      secretName: {{ .secretName }}
  {{- end }}
{{- end }}
  rules:
  {{- range .Values.front.ingress.hosts }}
    - host: {{ . | quote }}
      http:
        paths:
    {{- range $ingressPaths }}
          - path: /
            backend:
              serviceName: {{ include "marketplace.name" . }}-{{ $.Values.front.name }}
              servicePort: 3000
    {{- end }}
  {{- end }}
{{- end }}
Run Code Online (Sandbox Code Playgroud)

错误:

  Error: UPGRADE FAILED: render error in "marketplace/templates/front-ingress.yaml": template: marketplace/templates/front-ingress.yaml:36:30: executing "marketplace/templates/front-ingress.yaml" at <include "marketplace...>: error calling include: template: marketplace/templates/_helpers.tpl:6:18: executing "marketplace.name" at <.Chart.Name>: can't evaluate field Chart in type string
Run Code Online (Sandbox Code Playgroud)

marketplace.name 在 _helpers.tpl 中定义:

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

.Chart.Name是一个内部变量,这里解释了优先顺序,但即使设置nameOverride错误也是一样的。

奇怪的是,如果我删除这个模板,.Chart.Name在任何其他模板中都可以正常工作,所以我认为问题与使用的范围有关range

使用的值:

front:
  ingress:
    enabled: true
    annotations:
      kubernetes.io/ingress.class: nginx-int
      nginx.ingress.kubernetes.io/rewrite-target: /
      nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
    paths:
      - /
    hosts:
      - myhost.mydomain.cloud
    tls: []
Run Code Online (Sandbox Code Playgroud)

edb*_*ead 7

请参阅相关问题

基于此解决方法,您可以存储.在一个变量中,因为在range循环内部,.指的是paths:

你也可能想- path: /- path: {{ . }}

{{- if .Values.front.ingress.enabled -}}
{{- $fullName := include "bchart.fullname" . -}}
{{- $ingressPaths := .Values.front.ingress.paths -}}
{{- $dot := . }}
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
...
...
    {{- range $ingressPaths }}
          - path: {{ . }}
            backend:
              serviceName: {{ include "bchart.name" $dot }}-{{ $.Values.front.name }}
              servicePort: 3000
    {{- end }}
Run Code Online (Sandbox Code Playgroud)