Helm включает форматированную карту из values.yml

#kubernetes-helm

#kubernetes-helm

Вопрос:

У меня есть простой values.yml файл для моей диаграммы Helm:

 DbMigration:
  Resources:
    requests:
      memory: 256Mi
    limits:
      memory: 512Mi
  

В определении для моей задачи миграции базы данных у меня есть это:

 spec:
  activeDeadlineSeconds: 120
  template:
    spec:
      restartPolicy: Never
      containers:
        - name: myMigrate
          image: myRepo/myService:0.0.1
          imagePullPolicy: Always
          resources:
            requests:
            {{- range $key, $value := $.Values.DbMigration.Resources.requests }}
              {{ $key }}: {{ $value }}
            {{- end }}
            limits:
            {{- range $key, $value := $.Values.DbMigration.Resources.limits }}
              {{ $key }}: {{ $value }}
            {{- end }}
  

Есть ли какой-либо способ упростить resources область, чтобы я мог просто включить все данные из $.Values.DbMigration.Resources ? То, что у меня есть, работает, но должен быть более краткий способ. Я попытался использовать toYaml функцию аналогичным образом:

 {{- toYaml $.Values.DbMigration.Resources }}
  

Однако это приводит к:

Ошибка: СБОЙ ОБНОВЛЕНИЯ: ошибка синтаксического анализа YAML в MyTemplate.yaml: ошибка преобразования YAML в JSON: yaml: строка 30: значения сопоставления в этом контексте недопустимы

Ответ №1:

Если вы хотите отобразить блок из значений.yaml «как есть», тогда toYaml — это практически все, что вам понадобится.

 spec:
  activeDeadlineSeconds: 120
  template:
    spec:
      restartPolicy: Never
      containers:
        - name: myMigrate
          image: myRepo/myService:0.0.1
          imagePullPolicy: Always
          resources:
            {{- toYaml $.Values.DbMigration.Resources | nindent 12 }}
  

Если у вас все еще возникает ошибка преобразования в JSON, попробуйте немного поиграть с отступом, это все, что есть.

Ответ №2:

Для достижения этого существует несколько способов. Один из них заключается в том, что вместо использования range вы можете просто изменить значения.yaml в

 DbMigration: |
  resources:
    requests:
      memory: 256Mi 
    limits:
      memory: 512Mi
  

а затем внесите изменения в шаблон миграции как

   resources:
  {{- .Values.DbMigration | indent 12 }}
  

Пожалуйста, измените отступ соответствующим образом.

Другой метод заключается в использовании range и toYaml

 DbMigration:
  Resources:
    requests:
      memory: 256Mi
    limits:
      memory: 512M
  

шаблон миграции

 resources:
{{- range $key, $value := $.Values.DbMigration.Resources }}
    {{ $key }}: 
      {{ toYaml $value }}
{{- end }}
  

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

1. АХ ХА. Я вижу, чего мне не хватало. Это была ошибка синтаксиса шаблона Go, которая мешала мне делать то, что у вас там есть. Ваш ответ сделал это совершенно очевидным. Спасибо.