Имена поддиаграмм Helm и настройка переменных URL - PullRequest
0 голосов
/ 29 мая 2020

Требование: развернуть несколько выпусков диаграммы A в одном пространстве имен k8s

У меня сложная проблема с конфигурацией имени поддиаграммы. Связи между моими диаграммами следующие:

A
|- B
   |- C
      |- D - postgres
      |- E - graphql-engine
|- F - postgres
|- G - graphql-engine
  • A зависит от B, F, G
  • B зависит от C
  • C зависит от D , E

И диаграмма типа graphql-engine может требовать ноль или N переменных в зависимости от приложения, которое для него есть (если вы знаете это приложение, это должен быть URL-адрес серверной части, URL-адрес действия, URL-адрес триггера и т. c.). В примере E переменные должны указывать на приложение C, а в примере G они должны указывать на A.

Я сделал диаграмму Helm для графического движка с этой частью в разделе контейнера развертывания:

          env:
{{- range $k, $v := .Values.environmentVariables }}
            - name: {{ quote $k }}
              value: {{ quote "$v" }}
{{- end }}

Чтобы иметь правильные имена поддиаграмм, я делаю это в файле A`s variables.yaml:

B:
  C:
    nameOverride: A-B-C
    D:
      nameOverride: A-B-C-D
    E:
      nameOverride: A-B-C-E
F:
  nameOverride: A-F
G:
  nameOverride: A-G

Префиксы файла _helpers.tpl диаграммы по умолчанию nameOverride переменная с .Release.Name переменная. Это не очень хорошо и не оптимально, но я не нашел способа сделать этот процесс динамически созданным. Есть здесь кто-нибудь, кто знает способ лучше именовать? Это мой первый вопрос.

Чтобы упростить мою задачу. Мне нужно поместить список переменных следующим образом:

  • VAR1 = "http: // {{.Release.Name}} - AB- C: 8080 / graphql"
  • VAR2 = "http: // {{.Release.Name}} - AB- C: 8080 / actions"

в электронную таблицу из диаграммы. Но я не нашел способа разрешить шаблону Go расширять переменную .Release.Name. Я сделал это в A variables.yaml:

B:
  C:
    nameOverride: A-B-C
    D:
      nameOverride: A-B-C-D
    E:
      nameOverride: A-B-C-E
      extraVariables:
        VAR1: "http://{{ .Release.Name }}-A-B-C:8080/graphql"
        VAR2: "http://{{ .Release.Name }}-A-B-C:8080/actions"
F:
  nameOverride: A-F
G:
  nameOverride: A-G
  extraVariables:
    VAR1: "http://{{ .Release.Name }}-A:8080/graphql"

Но я не нашел способа, как использовать функцию tpl Helm в части диапазона с вводом долларовой переменной. Или другая возможность сделать это sh. Я попытался просто включить какой-то «шаблон», который я могу создать в диаграмме A, но у него был плохой контекст Vars и он используется в каждом экземпляре диаграммы graphql-engine, и это неправильно в этом.

Настоящее приложение A имеет больше уровней зависимостей, но это не важно для этой проблемы. Это неправильный способ сделать это? Как вы создаете имена объектов k8s и как настраиваете переменные URL для своих приложений?

Спасибо!

1 Ответ

1 голос
/ 01 июня 2020

И вот ответ на вопрос про цикл по списку с вызовом функции tpl. Вам просто нужно изменить контекст tpl.

{{- range $k, $v := .Values.environmentVariables }}
            - name: {{ quote $k }}
              value: {{ tpl $v $ }}
{{- end }}
...