Kubernetes Helm,将两个变量与中间的字符串组合在一起

时间:2017-07-24 10:50:11

标签: kubernetes go-templates kubernetes-helm

我试图改变一个变量的值,如果它设置的另一个变量是通过将两个变量组合在中间的一个破折号,我不确定这样做的语法,我想到的东西如下:

{{- $serviceNamespace := .Values.serviceNamespace -}}
{{- $serviceTag := .Values.serviceTag -}}
{{- if $serviceTag}}
{{- $serviceNamespace := .Values.serviceNamespace  "-" .Values.serviceTag -}}
{{- end}}

这是对的吗?如果serviceNamespacehelloserviceTag1.0.0,我最终会serviceNamespacehello-1.0.0吗?

3 个答案:

答案 0 :(得分:16)

对于连接,只需使用printf:

{{-  $serviceNamespace := printf "%s-%s" .Values.serviceNamespace .Values.serviceTag -}}

答案 1 :(得分:6)

<强>更新

现在可以在golang的 1.11 版本中看到commit

{{- $serviceNamespace := .Values.serviceNamespace -}}
{{- $serviceTag := .Values.serviceTag -}}
{{- if $serviceTag}}
{{- $serviceNamespace = .Values.serviceNamespace  "-" .Values.serviceTag -}}
{{- end}}

请注意=

中新的$serviceNamespace = .Values.serviceNamespace "-" .Values.serviceTag运算符

较旧的golang版本

您目前无法(在golang 1.9中,但在1.11中可用,请参阅上面的更新)重新分配模板变量,因为if引入了新范围。在修复此问题之前(see issueproposed fix),您可以通过编写函数来解决此问题:

{{ define "makeServiceNamespace" }}
    {{- if .Values.serviceTag }}
    {{- printf "%s-%s" .Values.serviceNamespace .Values.serviceTag -}}
    {{- else }}
    {{- print .Values.serviceNamespace }}
    {{- end }}
{{- end }}

然后像这样使用它:

serviceNamespace: {{ template makeServiceNamespace . }}

答案 2 :(得分:3)

您可以这样简单地做,中间用字符串“:”

"{{ $values.image.repository }}:{{ $values.image.tag }}"