Kubernetes Helm, объедините две переменные со строкой посередине

Я пытаюсь изменить значение переменной, если она установила другую переменную, объединив их с тире посередине, я не уверен в синтаксисе для этого, я думаю о таких вещах, как:

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

Это верно? если serviceNamespace было hello, а serviceTag было 1.0.0, получилось бы, что serviceNamespace было hello-1.0.0?


person Simon I    schedule 24.07.2017    source источник
comment
Зачем снова переназначать переменную $ serviceNamespace. Почему нельзя использовать (($ serviceNamespace}} - {{$ serviceTag}}?   -  person Bimal    schedule 25.07.2017


Ответы (3)


Для конкатенации просто используйте printf:

{{-  $serviceNamespace := printf "%s-%s" .Values.serviceNamespace .Values.serviceTag -}}
person abinet    schedule 25.07.2017
comment
Это дает мне ошибку сопоставления значений, недопустимых в этом контексте при установке helm, но все еще работает ... ??? - person A. Rabus; 12.02.2019
comment
Спасибо тебе за это. Я собираюсь опубликовать проблему в их репозитории на github, в котором показано, как я использовал это, чтобы избежать проблемы с преобразованием строки в int внутри цикла диапазона! - person dokun1; 21.08.2019

Обновить

Теперь это возможно в версии golang 1.11, см. commit:

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

Обратите внимание на новый оператор = в $serviceNamespace = print .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 }}

Тогда используйте это так:

serviceNamespace: {{ template makeServiceNamespace . }}
person David    schedule 25.01.2018

Вы можете просто сделать это так, со строкой: посередине

"{{ $values.image.repository }}:{{ $values.image.tag }}"
person Gabriel Wu    schedule 13.07.2020
comment
это должен быть главный ответ - person Chris Chen; 23.02.2021
comment
Как бы вы тогда применили к этому функцию с конвейером? - person Any1; 13.04.2021