Значение по умолчанию Helm вызывает ошибку преобразования YAML в JSON

У меня есть базовый шаблон kubernetes helm, как показано ниже.

apiVersion: v1
kind: ConfigMap
metadata:
  name: test
  namespace: {{ .Release.Namespace }}
  labels:
    app.kubernetes.io/version: {{ .Chart.AppVersion }}
    app.kubernetes.io/managed-by: {{ .Release.Service }}
    app.kubernetes.io/instance: {{ .Release.Name }}
data:
  config.tpl: |
{{- default ((tpl .Values.configTpl .) | indent 4)  (tpl (.Files.Get "files/config.tpl") . | indent 4) -}}

и файл values.yml

configTpl: |
   {{ x=8gwifi.org }}

Когда я применяю диаграмму руля, она выдает мне ошибку

❯ helm upgrade  mychart . --namespace=test --create-namespace --debug
upgrade.go:142: [debug] preparing upgrade for mychart
Error: UPGRADE FAILED: YAML parse error on 8gwifi.org-test/templates/configmap-logfilegen.yaml: error converting YAML to JSON: yaml: line 11: did not find expected comment or line break
helm.go:84: [debug] error converting YAML to JSON: yaml: line 11: did not find expected comment or line break

Я пробовал другую конфигурацию

config.tpl: |
    {{- default (tpl .Values.configTpl . | indent 4) (tpl (.Files.Get "files/config.tpl") . | indent 4) -}}

по-прежнему приводит к той же ошибке. Есть ли способ указать значение конфигурации, если оно не передано, а затем использовать жестко закодированное

Я уверен, что это проблема синтаксиса YAML, не мог понять, проверил все случаи

По предложению Дэвида

Отладка шаблона показывает это

data:
  config.tpl: |-
       x := 8gwifi.org
   y := "functions"

Я ясно вижу, что y не имеет отступа и выдает синтаксическую ошибку YAML, не знаю, как это исправить.

Это обновленное определение

data:
  config.tpl: |-
    {{ (tpl .Values.configTpl . | indent 4)  | default (tpl (.Files.Get "files/config.tpl") . | indent 4) -}}

значения.yml

configTpl: |
   x := "8gwifi.org"
   y := "function"

config.tpl: |- {{- default ((tpl .Values.configTpl .) | отступ 4) (tpl (.Files.Get "files/config.tpl") . | отступ 4) -}} добавлен лишний дефис для поддержки нескольких строк попробуйте это?

Bijendra 13.02.2023 19:45

Привет, Биджендра, это выдает мне ту же ошибку?

anish 13.02.2023 20:00

Если вы пропустите helm template --debug по диаграмме, станет ли очевидно, что сгенерированный YAML неверен? (Я подозреваю, что - перед default, и в этом случае вы увидите содержимое в той же строке config.tpl: |{{ ... }}.)

David Maze 13.02.2023 20:20

@DavidMaze Я обновил ответ, я вижу, что Y не получает отступа

anish 14.02.2023 07:24
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
0
4
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы сталкиваетесь с проблемами с пробелами в первой строке блочного скаляра. Вы должны проверить две вещи:

  1. Блок шаблона, содержащий indent, сам по себе не должен иметь отступ, он должен начинаться с первого столбца своей строки; и
  2. Блок шаблона, содержащий indent, не должен содержать - внутри открывающих фигурных скобок.
{{- $configTpl := .Values.configTpl | default (.Files.Get "tiles/config.tpl") }}
  config.tpl: |
{{ tpl $configTpl . | indent 4 }}

Язык шаблонов на самом деле не знает о синтаксисе YAML во время работы. Если у вас есть пробелы перед строкой indent, они будут выделены, а затем indent добавит свой собственный начальный пробел, в результате чего последний вывод вы получите там, где первая строка имеет дополнительный отступ. Маркер управления пробелом - также будет потреблять предыдущую новую строку, в результате чего первая строка вывода окажется на той же строке, что и скалярный маркер блока YAML.

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