helm chart error: could not find expected ':'
helm chart error: could not find expected ':'
我在执行 helm chart 时遇到以下错误。
错误:helmcharts/templates/route.yaml 上的 YAML 解析错误:将 YAML 转换为 JSON 时出错:yaml:第 25 行:找不到预期的 ':'
如果我在将证书引用到 route.yaml 时从 Values.yaml 文件中删除多行字符串“|-”,则图表工作正常。由于我删除了“|-”,因此在将证书内容复制到 route.yaml 并且无法创建路由时,证书内容不会以正确的缩进保留。
key: <--- works if I don't provide multiline "|-"
-----BEGIN CERTIFICATE-----
[...]
-----END CERTIFICATE-----
certificate:
-----BEGIN CERTIFICATE-----
[...]
-----END CERTIFICATE-----
caCertificate:
-----BEGIN CERTIFICATE-----
[...]
-----END CERTIFICATE-----
我该如何解决这个问题?在 values.yaml 文件中提供证书内容并传递它 route.yaml 是一种正确的方法吗?对于 Ingress,创建一个 tls 秘密对象并在 values.yaml 中传递文件名非常简单,但我们如何在 openshift 路由中实现相同的目的?
Values.yaml
route:
Enabled: true
annotations:
haproxy.router.openshift.io/cookie_name: SESSION_XLD
haproxy.router.openshift.io/disable_cookies: "false"
haproxy.router.openshift.io/rewrite-target: /
path: /
hosts:
- www.example.com
tls:
key: |- <--- Doesn't work if i provide this "|-"
-----BEGIN CERTIFICATE-----
[...]
-----END CERTIFICATE-----
certificate: |- <--- Doesn't work if I provide this "|-"
-----BEGIN CERTIFICATE-----
[...]
-----END CERTIFICATE-----
caCertificate: |- <--- Doesn't work if i provide this "|-"
-----BEGIN CERTIFICATE-----
[...]
-----END CERTIFICATE-----
insecureEdgeTerminationPolicy: Redirect
route.yaml
25 {{- if $.Values.route.tls }}
26 tls:
27 {{- with $.Values.route.tls }}
28 key: |-
29 {{ .key }}
30 certificate: |-
31 {{ .certificate }}
32 caCertificate: |-
33 {{ .caCertificate }}
34 insecureEdgeTerminationPolicy: {{ .insecureEdgeTerminationPolicy }}
35 {{- end }}
36 termination: edge
37 {{- end }}
.Values.route.tls.key
(例如)是一个多行字符串,但嵌入它的方式只是缩进了第一行。如果你 运行 helm template
在这上面,我希望你看到(正是这个缩进):
key: |-
-----BEGIN CERTIFICATE-----
[...]
-----END CERTIFICATE-----
您可以使用 indent
模板函数缩进整个字符串:
key: |-
{{ .key | indent 8 }}
indent
也缩进第一行;缩进量应比 key:
行上的空格数多 2。
我在执行 helm chart 时遇到以下错误。
错误:helmcharts/templates/route.yaml 上的 YAML 解析错误:将 YAML 转换为 JSON 时出错:yaml:第 25 行:找不到预期的 ':'
如果我在将证书引用到 route.yaml 时从 Values.yaml 文件中删除多行字符串“|-”,则图表工作正常。由于我删除了“|-”,因此在将证书内容复制到 route.yaml 并且无法创建路由时,证书内容不会以正确的缩进保留。
key: <--- works if I don't provide multiline "|-"
-----BEGIN CERTIFICATE-----
[...]
-----END CERTIFICATE-----
certificate:
-----BEGIN CERTIFICATE-----
[...]
-----END CERTIFICATE-----
caCertificate:
-----BEGIN CERTIFICATE-----
[...]
-----END CERTIFICATE-----
我该如何解决这个问题?在 values.yaml 文件中提供证书内容并传递它 route.yaml 是一种正确的方法吗?对于 Ingress,创建一个 tls 秘密对象并在 values.yaml 中传递文件名非常简单,但我们如何在 openshift 路由中实现相同的目的?
Values.yaml
route:
Enabled: true
annotations:
haproxy.router.openshift.io/cookie_name: SESSION_XLD
haproxy.router.openshift.io/disable_cookies: "false"
haproxy.router.openshift.io/rewrite-target: /
path: /
hosts:
- www.example.com
tls:
key: |- <--- Doesn't work if i provide this "|-"
-----BEGIN CERTIFICATE-----
[...]
-----END CERTIFICATE-----
certificate: |- <--- Doesn't work if I provide this "|-"
-----BEGIN CERTIFICATE-----
[...]
-----END CERTIFICATE-----
caCertificate: |- <--- Doesn't work if i provide this "|-"
-----BEGIN CERTIFICATE-----
[...]
-----END CERTIFICATE-----
insecureEdgeTerminationPolicy: Redirect
route.yaml
25 {{- if $.Values.route.tls }}
26 tls:
27 {{- with $.Values.route.tls }}
28 key: |-
29 {{ .key }}
30 certificate: |-
31 {{ .certificate }}
32 caCertificate: |-
33 {{ .caCertificate }}
34 insecureEdgeTerminationPolicy: {{ .insecureEdgeTerminationPolicy }}
35 {{- end }}
36 termination: edge
37 {{- end }}
.Values.route.tls.key
(例如)是一个多行字符串,但嵌入它的方式只是缩进了第一行。如果你 运行 helm template
在这上面,我希望你看到(正是这个缩进):
key: |-
-----BEGIN CERTIFICATE-----
[...]
-----END CERTIFICATE-----
您可以使用 indent
模板函数缩进整个字符串:
key: |-
{{ .key | indent 8 }}
indent
也缩进第一行;缩进量应比 key:
行上的空格数多 2。