С помощью файла шаблона helm можно условно установить переменные, используемые во всем файле шаблона

Я хочу условно установить переменную go в верхней части файла шаблона helm, а затем использовать ее позже в файле шаблона. Вот то, что я пробовал, но не работает:

В верхней части файла шаблона я делаю следующее:

{{- if eq $.Values.kafka.create true -}}
{{- $kafka_port := 9094 -}}
{{- else -}}
{{- $kafka_port := $.Values.kafka.port -}} 
{{- end }}

Но когда я пытаюсь выполнить установку helm, я получаю сообщение об ошибке синтаксического анализа, в котором позже я использую $ kafka_port в файле шаблона. Конкретная ошибка:

Ошибка: ошибка синтаксического анализа в (tombolo / templates / tom-node-launch.yaml: 89): неопределенная переменная $ kafka_port


person tlhumphrey2    schedule 17.06.2021    source источник


Ответы (3)


Определите переменную во внешнем блоке:

{{- $kafka_port := 9094 -}}
{{- if eq $.Values.kafka.create false -}}
{{- $kafka_port = $.Values.kafka.port -}} 
{{- end }}
person Burak Serdar    schedule 17.06.2021

Ваш пример довольно короткий и вполне может подойти для вашего варианта использования.

Но как правило: когда вы начинаете писать код в своих шаблонах, это также может указывать на то, что вы должны писать код в части контроллера (код go):

type KafkaCfg struct {
    port   int
    create bool
}

const kafkaCreationPort = 9094

func (c KafkaCfg) Port() int {
    if c.create {
        return kafkaCreationPort
    }
    return c.port
}


func someWhereElse() {
    var data struct {
        Values struct {
            Kafka KafkaCfg
        }
    }

    data.Values.Kafka.create = true
    helmTemplate.Execute(w, data)
}

// in your template :

{{ .Values.Kafka.Port }} {{ /* <- will call the .Port() method */ }}

https://play.golang.org/p/6pNHY0kcegp

person LeGEC    schedule 17.06.2021

Язык Go text/template (в отличие от самого языка программирования Go) не имеет глобальных переменных.

Вы можете написать вспомогательный шаблон, обычно на templates/_helpers.tpl, который генерирует этот фрагмент:

{{- define "kafka.port" -}}
{{- if .Values.kafka.create -}}
9094
{{- else -}}
{{- .Values.kafka.port -}}
{{- end -}}

Этот шаблон выводит номер порта при вызове; его единственным параметром должен быть стандартный объект Helm верхнего уровня.

- name: KAFKA_PORT
  value: {{ include "kafka.port" . | quote }}

Или, если в конкретном контексте он вам понадобится как переменная, вы можете включить ее туда (используя Helm include extension для захвата вывода вызываемого шаблона в виде строки); но он будет ограничен конкретным шаблоном или файлом.

{{- $kafkaPort := include "kafka.port" . }}
- name: KAFKA_PORT
  value: {{ quote $kafkaPort }}
- name: KAFKA_BROKER_URL
  value: kafka://{{ include "kafka.name" . }}:{{ $kafkaPort }}
person David Maze    schedule 17.06.2021