Helm-仅当存在值时才添加字符

时间:2019-12-19 03:21:42

标签: kubernetes-helm

我已经创建了一个舵图,下面是该图的片段。

我将从我的值文件中获取gateway.contextpath的值。

prefix: /{{ .Release.Name }}/{{ .Values.gateway.contextpath}}/

在少数情况下,会传递gateway.contextpath,而在少数情况下不会传递值。传递值后,我得到如下输出

prefix: /sample/hello/

但是,当未传递值时,我看到添加了 /

prefix: /sample//

是否可以基于值文件控制添加 /

3 个答案:

答案 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 "/"}}