我已经创建了一个舵图,下面是该图的片段。
我将从我的值文件中获取gateway.contextpath的值。
prefix: /{{ .Release.Name }}/{{ .Values.gateway.contextpath}}/
在少数情况下,会传递gateway.contextpath,而在少数情况下不会传递值。传递值后,我得到如下输出
prefix: /sample/hello/
但是,当未传递值时,我看到添加了 / 。
prefix: /sample//
是否可以基于值文件控制添加 / ?
答案 0 :(得分:3)
您可以在 _helpers.tpl 中定义一个函数,如下所示:
{{- define "superchart.getPath" -}}
{{- if .Values.gateway -}}
{{- if .Values.gateway.contextpath -}}
{{- printf "/%s/%s/" .Release.Name .Values.gateway.contextpath -}}
{{- else -}}
{{- printf "/%s/" .Release.Name -}}
{{- end -}}
{{- else -}}
{{- printf "/%s/" .Release.Name -}}
{{- end -}}
{{- end -}}
并在您的 deployment.yaml (或任何其他文件)中使用它
prefix: {{ include "superchart.getPath" . }}
答案 1 :(得分:3)
Go text/template language有{{ if }}...{{ end }}
个条件,您可以在其中放置几乎任意的内容。您所显示内容的直接方法可能是
prefix: /{{ .Release.Name -}}
{{- if .Values.gateway.contextpath -}}
/{{ .Values.gateway.contextpath -}}
{{- end -}}
/
无论花括号内有一个-
,它都会导致模板引擎消耗与其相邻的所有空白,因此它应该出现在单个字符串中(即使它写成五行)。 / p>
(请记住,您可以使用helm template
命令来绘制图表,而无需实际将其提交给Kubernetes,这对于调试很有帮助。)
模板文件的美观可能很棘手;还有其他方法可以将其重新排列以使其更具可读性。使用临时变量的另一种选择:
{{- $p := .Values.gateway.contextpath }}
prefix: /{{ .Release.Name }}{{ if $p }}/{{ $p }}{{ end }}/
@edbighead的answer将其分解为完全独立的模板也是一种好方法:与我在这里的建议相比,/path/part
URL布局在那里很明显。
答案 2 :(得分:0)
如果需要,可以使用正则表达式添加前导斜线:
{{regexReplaceAll "^/*" .Values.ingress.context "/"}}
您可以使用它来规范化/删除组合路径中的斜杠:
{{regexReplaceAll "^/*|/+" .Values.ingress.context "/"}}
或者,您也可以强制使用尾部斜杠:
{{regexReplaceAll "^/*|/+|/*$" .Values.ingress.context "/"}}