web-dev-qa-db-fra.com

Kubernetes Helm, combine deux variables avec une chaîne au milieu

J'essaie de changer la valeur d'une variable si une autre variable qu'elle définit en combinant les deux avec un tiret au milieu, je ne suis pas sûr de la syntaxe pour le faire, je pense à quelque chose comme:

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

Est-ce correct? si serviceNamespace était hello et serviceTag était 1.0.0 devrais-je me retrouver avec serviceNamespace étant hello-1.0.0?

14
Simon I

Pour la concaténation, utilisez simplement printf:

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

Mise à jour

C'est maintenant possible dans la version 1.11 de golang, voir commit :

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

Remarquez le nouveau = opérateur dans $serviceNamespace = .Values.serviceNamespace "-" .Values.serviceTag

Anciennes versions de golang

Vous ne pouvez pas actuellement (dans golang 1.9, mais disponible dans 1.11, voir la mise à jour ci-dessus) réattribuer des variables de modèle car if introduit une nouvelle portée. Jusqu'à ce que cela soit résolu ( voir problème et correction proposée ), vous pouvez contourner cela en écrivant une fonction:

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

Ensuite, utilisez-le comme ceci:

serviceNamespace: {{ template makeServiceNamespace . }}
8
David