This is an old revision of the document!
Создание чартов helm
Определение значений values.yaml через уже известные значения
https://github.com/helm/helm/issues/2492
https://github.com/helm/helm/issues/2492#issuecomment-589699208
Например, у меня есть чарт, который разворачивает кластер Elasticsearch с помощью Elasticsearch Operator. В составе этого чарта есть subchart, который разворачивает logstash.
В конфигурацию logstash должны попасть путь к elasticsearch и пароль для basic-аутентификации. FQDN-имя, по которому будет доступен Elastic формируется при разворачивании кластера и включает в себя имя релиза ( .Release.Name ), а пароль хотелось бы задать один раз, в одном месте в едином файле values.yaml!
Задача - сделать так, чтобы значения, определенные для кластера elasticsaerch стали доступны для logstash с минимальными изменениями в коде чарта logstash, а лучше даже и без них!
values.yaml
global: internalElasticUserPassword: AG7dGmsZp2NDpRED # пароль, который будет установлен для встроенного пользователя elastic. # Он будет использован как минимум дважды. Первый раз - при создании секрета с паролем пользователя в основном чарте кластера elasticsearch. # И второй раз - для создания переменной окружения logstash, которая будет использована в конфигурации output. #..... logstash: image: tag: |- {{ .Chart.AppVersion }} config: ELASTIC_PASSWORD: |- {{ tpl (printf "%s" .Values.global.internalElasticUserPassword) $ }} queue.max_bytes: 1gb queue.type: memory elasticsearch: host: |- {{ tpl (printf "%s%s%s%s" .Release.Name "-es-http." .Release.Namespace ".svc.cluster.local" ) $ }} port: 9200 outputs: main: |- output { elasticsearch { hosts => ["${ELASTICSEARCH_HOST}:${ELASTICSEARCH_PORT}"] index => "etl-%{+YYYY.MM.dd}" user => "elastic" password => "${ELASTIC_PASSWORD}" ssl => true ssl_certificate_verification => false } }
а в statefullset.yaml субчарта logstash приводим соответствующие строки к такому виду:
- name: {{ .Chart.Name }} image: "{{ .Values.image.repository }}:{{ tpl .Values.image.tag . }}" ## Elasticsearch output - name: ELASTICSEARCH_HOST value: {{ tpl (.Values.elasticsearch.host | toString) . | quote }} #### {{- range $key, $value := .Values.config }} - name: {{ $key | upper | replace "." "_" }} value: {{ tpl ($value | toString ) $ | quote }} {{- end }}
То есть строки, указанные в values интерпретируются с помощью функции tpl.
Discussion