是什么导致 Helm 图表模板抛出 'unexpected EOF'?
What causes Helm chart template to throw 'unexpected EOF'?
我正在尝试将入口添加到我的 nginx 容器中。
下面的入口模板给我“解析错误(<>/ingress.yaml:71:意外的 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 }}
您的文件通常结构如下:
{{- 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 }}
数量。
我自己可能会避免这种风格。通常这些条件块很短;如果有帮助,您可以将模板分成多个 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
文件中包含一个模板以生成通用值会减少一些重复性。
我正在尝试将入口添加到我的 nginx 容器中。
下面的入口模板给我“解析错误(<>/ingress.yaml:71:意外的 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 }}
您的文件通常结构如下:
{{- 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 }}
数量。
我自己可能会避免这种风格。通常这些条件块很短;如果有帮助,您可以将模板分成多个 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
文件中包含一个模板以生成通用值会减少一些重复性。