kubernetes - 是什么导致 Helm 图表模板抛出“意外的 EOF”?
问题描述
我正在尝试将入口添加到我的 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 }}
解决方案
您的文件通常结构如下:
{{- if .Values.someCondition }}
...
{{- end }} # {{- if .Values.someCondition }}
但是,Gotext/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
文件中包含一个模板来生成通用值将减少一些重复性。
推荐阅读
- android - 通过 Android 应用程序扫描二维码后如何从二维码中获取用户详细信息?
- ansible - 如何使用 ansible playbook 运行 rsync
- amazon-sqs - ApproximateNumberOfMessagesDelayed 的亚马逊 SQS 指标不匹配
- python - 使用连接字符串作为先前定义的变量
- java - Android Studio如何调整浮动动作按钮的图片来源
- php - SEOPress 插件不适用于 Wordpress 5.7
- java - 在 Android 画布上设置屏幕范围
- sequelize.js - Sequelize 数据检索向上
- option - 用于切换 TMUX 窗口的“ALT”键映射在 Mac Book 上不起作用
- symfony - Symfony 5.2 验证 json_login 请求