web-dev-qa-db-ja.com

Kubernetes Helm、2つの変数を中央の文字列で結合します

中間にダッシュを付けて2つの変数を組み合わせて設定する別の変数がある場合、変数の値を変更しようとしています。これを行うための構文がわかりません。次のようなことを考えています。

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

これは正しいです? serviceNamespacehelloで、serviceTag1.0.0私はserviceNamespaceになることになりますhello-1.0.0

14
Simon I

連結するには、printfを使用します。

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

更新

Golangの1.11バージョンで可能になりました。 commit を参照してください:

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

=の新しい$serviceNamespace = .Values.serviceNamespace "-" .Values.serviceTag演算子に注目してください。

古いgolangバージョン

ifが新しいスコープを導入するため、現在(golang 1.9では、1.11では利用可能ですが、上記の更新を参照)テンプレート変数を再割り当てすることはできません。これが修正されるまで( issueを参照 および 提案された修正 )、関数を書くことでこれを回避できます:

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

その後、次のように使用します。

serviceNamespace: {{ template makeServiceNamespace . }}
8
David