Как мне получить имя родительского элемента из моих значений.yaml в шаблоне шлема?

#kubernetes-helm

Вопрос:

У меня есть раздел в моих ценностях.yaml, который выглядит так:

 env:
  normal:
    ENV_VAR_1: value
    ENV_VAR_2: otherValue
  secret:
    secret-location:
      ENV_VAR_USERNAME: username
      ENV_VAR_PASSWORD: password
    different-secret:
      ENV_CONN_STRING: my_conn_string
 

У меня есть функция _helpers.tpl примерно так:

 {{/*
Add environment variables
*/}}
{{- define "helpers.list-env-variables" }}
{{- range $key, $val := .Values.env.normal }}
- name: {{ $key }}
  value: {{ $val }}
{{- end }}
{{- range $name := .Values.env.secret }}
{{- }}
{{- range $key, $val := $name }}
- name: {{ $key }}
  valueFrom:
    secretKeyRef:
      name: {{ $name }}
      key: {{ $val }}
{{- end }}
{{- end }}
{{- end }}
 

и это называется в развертывании.ямл, как и следовало ожидать:

           env:
          {{- include "helpers.list-env-variables" . | indent 12 }}
 

Таким образом, обычные переменные среды добавляются просто отлично, но секретные-нет. В нем указывается, что secretKeyRef.name: значение как map[ENV_VAR_USERNAME:username ENV_VAR_PASSWORD:password] вместо secret-key-ref .

вывод отладки руля:

 ...
         env:
            - name: ENV_VAR_1
              value: value
            - name: ENV_VAR_2
              value: otherValue
            - name: ENV_VAR_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: map[ENV_VAR_USERNAME:username ENV_VAR_PASSWORD:password]
                  key: password
            - name: ENV_VAR_USERNAME
              valueFrom:
                secretKeyRef:
                  name: map[ENV_VAR_USERNAME:username ENV_VAR_PASSWORD:password]
                  key: username
            - name: ENV_CONN_STRING
              valueFrom:
                secretKeyRef:
                  name: map[ENV_CONN_STRING:my_conn_string]
                  key: my_conn_string
 

У меня уже есть все эти секреты, загруженные в мой кластер K8s (они передаются нескольким микросервисам, поэтому мне не нужно добавлять новые секреты, что, похоже, хочет сделать шаблон Helm по умолчанию) — мне просто нужно ссылаться на существующие секреты.

Мое предположение здесь заключается в том, что в моей функции чего-то не хватает для получения значения элемента (например, «секретное местоположение»), я просто не могу понять, что это такое. Если есть другой способ, я могу структурировать свои ценности.yaml для достижения этой цели, я тоже готов к этому.

Ответ №1:

При получении секретных данных они также могут быть получены в виде ключа-val.

Попробуйте заменить _helpers.tpl следующим

 {{/*
Add environment variables
*/}}
{{- define "helpers.list-env-variables" }}
{{- range $key, $val := .Values.env.normal }}
- name: {{ $key }}
  value: {{ $val }}
{{- end }}
{{- range $k, $v := .Values.env.secret }}
{{- }}
{{- range $key, $val := $v }}
- name: {{ $key }}
  valueFrom:
    secretKeyRef:
      name: {{ $k }}
      key: {{ $val }}
{{- end }}
{{- end }}
{{- end }}
 

Комментарии:

1. Классно! Это было именно то, что мне было нужно. Совершенно ошеломленный тем, что я не хватал ключ из этого внешнего диапазона.