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

Sim*_*n I 16 go-templates kubernetes kubernetes-helm

我试图改变一个变量的值,如果它设置的另一个变量是通过将两个变量组合在中间的一个短划线,我不确定这样做的语法,我想到的事情如下:

{{- $serviceNamespace := .Values.serviceNamespace -}}
{{- $serviceTag := .Values.serviceTag -}}
{{- if $serviceTag}}
{{- $serviceNamespace := .Values.serviceNamespace  "-" .Values.serviceTag -}}
{{- end}}
Run Code Online (Sandbox Code Playgroud)

它是否正确?如果serviceNamespacehello,serviceTag1.0.0我最终会serviceNamespace成为hello-1.0.0

abi*_*net 28

对于连接,只需使用printf:

{{-  $serviceNamespace := printf "%s-%s" .Values.serviceNamespace .Values.serviceTag -}}
Run Code Online (Sandbox Code Playgroud)


Gab*_* Wu 24

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

"{{ $values.image.repository }}:{{ $values.image.tag }}"
Run Code Online (Sandbox Code Playgroud)

  • 那么你将如何应用带有管道的函数呢? (24认同)

Dav*_*vid 8

更新

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

{{- $serviceNamespace := .Values.serviceNamespace -}}
{{- $serviceTag := .Values.serviceTag -}}
{{- if $serviceTag}}
{{- $serviceNamespace = .Values.serviceNamespace  "-" .Values.serviceTag -}}
{{- end}}
Run Code Online (Sandbox Code Playgroud)

注意新的=运营商$serviceNamespace = .Values.serviceNamespace "-" .Values.serviceTag

较旧的golang版本

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

{{ define "makeServiceNamespace" }}
    {{- if .Values.serviceTag }}
    {{- printf "%s-%s" .Values.serviceNamespace .Values.serviceTag -}}
    {{- else }}
    {{- print .Values.serviceNamespace }}
    {{- end }}
{{- end }}
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它:

serviceNamespace: {{ template makeServiceNamespace . }}
Run Code Online (Sandbox Code Playgroud)