【问题标题】:What causes Helm chart template to throw 'unexpected EOF'?是什么导致 Helm 图表模板抛出“意外的 EOF”?
【发布时间】:2021-09-14 19:07:54
【问题描述】:

我正在尝试向我的 nginx 容器添加入口。

以下入口模板给了我“解析错误(/ingress.yaml:71: unexpected EOF)”。我经历了尝试标记可能丢失的结束语句,但即使在文件末尾添加任意结束也不能解决它。我对导致此 EOF 的原因一无所知。

所以问题很笼统:是什么导致文件中出现“意外的 EOF”?

{{- if .Values.web.ingress.enabled }}

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: {{ .Release.Name }}-proxy-ingress
  labels:
    tier: intelowl
    component: proxy
    release: {{ .Release.Name }}
    chart: {{ .Chart.Name }}
    heritage: {{ .Release.Service }}
{{- with .Values.labels }}
{{ toYaml . | indent 4 }}
{{- end }} # {{- with .Values.labels }}

{{- if .Values.web.ingress.annotations }}
  annotations:
{{- with .Values.web.ingress.annotations }}
{{ toYaml . | indent 4 }}
{{- end }} # {{- with .Values.web.ingress.annotations }}
{{- end }} # {{- if .Values.web.ingress.annotations }}

spec:

{{- if .Values.web.ingress.tls.enabled }}
  tls:
    - hosts:
        - {{ .Values.web.ingress.host }}
      secretName: {{ .Values.web.ingress.tls.secretName }}
{{- end }} # {{- if .Values.web.ingress.tls.enabled }}

  rules:
    - http:
        paths:
{{- range .Values.web.ingress.precedingPaths }}
          - path: {{ .path }}
            backend:
              service:
                name: {{ .serviceName }}
                port: 
                  number: {{ .servicePort }}
{{- end }} # {{- range .Values.web.ingress.precedingPaths }}

          - backend:
              service:
                name: {{ .Release.Name }}-proxy
                port: 
                  number: {{ ternary 443 80 .Values.web.ingress.tls.enabled }}
{{- if .Values.web.ingress.path }}
            path: {{ .Values.web.ingress.path }}
{{- end }} # {{- if .Values.web.ingress.path }}

{{- range .Values.web.ingress.succeedingPaths }}
          - path: {{ .path }}
            backend:
              service:
                name: {{ .serviceName }}
                port: 
                  number: {{ .servicePort }}
{{- end }} # {{- range .Values.web.ingress.succeedingPaths }}

{{- if .Values.web.ingress.host }}
      host: {{ .Values.web.ingress.host }}
{{- end }} # {{- if .Values.web.ingress.host }}

{{- end }} # {{- if .Values.web.ingress.enabled }}

【问题讨论】:

    标签: kubernetes yaml kubernetes-helm helmfile


    【解决方案1】:

    您的文件通常结构如下:

    {{- if .Values.someCondition }}
    ...
    {{- end }} # {{- if .Values.someCondition }}
    

    但是,Go text/template 引擎会在任何 YAML 解析发生之前运行。在这个例子中没有评论;有一个if 语句、匹配的end 和一个未终止的if

    text/template 语言有自己的{{/* comment */}} 语法,原则上你可以使用它

    {{- if .Values.someCondition }}
    ...
    {{- end }}{{/* if .Values.someCondition */}}
    

    除此之外,您显示的文件似乎有正确的{{ end }}s 编号。

    我自己可能会避免这种风格。通常这些条件块相当短;如果有帮助,您可以将模板拆分为多个 define 命名模板。

    metadata:
      labels:
        tier: intelowl
        et: cetera
    {{- include "more-labels" . | indent 4 }}
    {{- include "ingress-annotations" . | indent 2 }}
    
    {{- define "more-labels" -}}
    {{ with .Values.labels }}{{ toYaml . }}{{ end }}
    {{- end -}}
    
    {{- define "ingress-annotations" -}}
    {{- with .Values.web.ingress.annotations }}
    annotations:
    {{ toYaml . | indent 2 }}
    {{- end -}}
    {{- end -}}
    

    特别是对于标签,您可能会发现某些值将在所有对象中重复使用,因此在 _helpers.tpl 文件中包含一个模板来生成通用值将减少一些重复性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-26
      • 1970-01-01
      • 2015-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-01
      • 1970-01-01
      相关资源
      最近更新 更多