我正在安装一个具有 ingress.yaml 模板的舵图。
我收到此错误:
错误:在“chartmuseum/templates/ingress.yaml”中呈现错误:模板:chartmuseum/templates/ingress.yaml:35:22:在 <.Values.service.servicename> 处执行“chartmuseum/templates/ingress.yaml”:nil指针求值接口 {}.service
我无法找到问题所在。同一套 if else 结构在同一个 helm chart 的 service.yaml 中完全可以正常工作。
- path: {{ default "/" .path | quote }}
backend:
{{- if .Values.service.servicename }}
serviceName: {{ .Values.service.servicename }}
{{- else }}
serviceName: {{ include "chartmuseum.fullname" . }}
{{- end }}
Run Code Online (Sandbox Code Playgroud)
在这一行出现错误 --> serviceName: {{ .Values.service.servicename }}
在 service.yaml 中有效的代码是
metadata:
{{- if .Values.service.servicename }}
name: {{ .Values.service.servicename }}
{{- else }}
name: {{ include "chartmuseum.fullname" . }}
{{- end }}
Run Code Online (Sandbox Code Playgroud)
预期结果:如果 values.yaml 文件中的 values 中有一个 servcice.servicename ,则入口应该从那里为 key serviceName 选择值。否则它应该包括“chartmuseum.fullname”。
相同的结构适用于 service.yaml。
以下是我正在使用的原始舵图的网址。
https://github.com/helm/charts/tree/master/stable/chartmuseum
我只是修改了 ingress.yaml 以在第 31 行附近添加 if else 块。 Ingress.yaml https://github.com/helm/charts/blob/master/stable/chartmuseum/templates/ingress.yaml
Values.yaml 文件无关紧要。我有以下值
service:
servicename: helm-charts-test
Run Code Online (Sandbox Code Playgroud)
但即使没有这个值, if else 块也有望工作。
yan*_*ver 46
你看到的是 Go 模板中的一个奇怪的警告。您的条件逻辑正在范围循环内进行评估。这意味着.
您使用的访问Values
不是您期望的访问,因为它被每个范围迭代评估覆盖。您可以使用$
, 它引用全局范围以按Values
预期访问。
对于您的场景,它将类似于:
- path: {{ default "/" .path | quote }}
backend:
{{- if $.Values.service.servicename }}
serviceName: {{ $.Values.service.servicename }}
{{- else }}
serviceName: {{ include "chartmuseum.fullname" $ }}
{{- end }}
Run Code Online (Sandbox Code Playgroud)
请参阅此处了解更多详情。
krz*_*rzk 12
我按照@Torrey 的回答并替换了
targetPort: {{ .Values.non_existing.port | default 1234 }}
Run Code Online (Sandbox Code Playgroud)
和
targetPort: {{ (.Values.non_existing).port | default 1234 }}
Run Code Online (Sandbox Code Playgroud)
它起作用了
归档时间: |
|
查看次数: |
25584 次 |
最近记录: |