Как объединить 2 списка (контейнеров) в Helm?

Я пытаюсь создать свою собственную библиотеку диаграмм из учебника: https://helm.sh/docs/topics/library_charts/. В туториале есть действительно приятная функция, которая объединяет 2 yaml'a:

{{- define "libchart.util.merge" -}}
{{- $top := first . -}}
{{- $overrides := fromYaml (include (index . 1) $top) | default (dict ) -}}
{{- $tpl := fromYaml (include (index . 2) $top) | default (dict ) -}}
{{- toYaml (merge $overrides $tpl) -}}
{{- end -}}

Я определяю шаблон веб-развертывания как:

{{- define "libchart.web.tpl" -}}
(...)
      containers:
      - env:
        envFrom:
        - configMapRef:
            name: app-configmap
        - secretRef:
            name: app-secrets
        image: {{ include "libchart.image" . }}
        imagePullPolicy: Always
        name: web
        resources: {}

(...)
{{- end -}}
{{- define "libchart.web" -}}
{{- include "libchart.util.merge" (append . "libchart.web.tpl") -}}
{{- end -}}

Когда я хочу переопределить словарь, это нормально:

{{- include "libchart.web" (list . "web") -}}
{{- define "web" -}}
metadata:
    annotations:
      test1: "test1"
{{- end -}}

А теперь я хочу переопределить ресурсы:

{{- include "libchart.web" (list . "web") -}}
{{- define "web" -}}
spec:
  template:
    spec:
      containers:
      - resources:
          requests:
            cpu: '0.01'
            memory: 109.0Mi
{{- end -}}

И ошибка, которую я получаю:

Error: unable to build kubernetes objects from release manifest: error validating "": error validating data: ValidationError(Deployment.spec.template.spec.containers[0]): missing required field "name" in io.k8s.api.core.v1.Container

Это означает, что он пытается создать 2 элемента в списке контейнеров.

Я обнаружил закрытую проблему на githug: https://github.com/helm/charts/issues/19855.

0 ответов

Другие вопросы по тегам