У меня есть базовый шаблон 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"
Привет, Биджендра, это выдает мне ту же ошибку?
Если вы пропустите helm template --debug по диаграмме, станет ли очевидно, что сгенерированный YAML неверен? (Я подозреваю, что - перед default, и в этом случае вы увидите содержимое в той же строке config.tpl: |{{ ... }}.)
@DavidMaze Я обновил ответ, я вижу, что Y не получает отступа
Вы сталкиваетесь с проблемами с пробелами в первой строке блочного скаляра. Вы должны проверить две вещи:
indent
, сам по себе не должен иметь отступ, он должен начинаться с первого столбца своей строки; иindent
, не должен содержать -
внутри открывающих фигурных скобок.{{- $configTpl := .Values.configTpl | default (.Files.Get "tiles/config.tpl") }}
config.tpl: |
{{ tpl $configTpl . | indent 4 }}
Язык шаблонов на самом деле не знает о синтаксисе YAML во время работы. Если у вас есть пробелы перед строкой indent, они будут выделены, а затем indent добавит свой собственный начальный пробел, в результате чего последний вывод вы получите там, где первая строка имеет дополнительный отступ. Маркер управления пробелом - также будет потреблять предыдущую новую строку, в результате чего первая строка вывода окажется на той же строке, что и скалярный маркер блока YAML.
Config.tpl: |- {{- default ((tpl .Values.configTpl .) | отступ 4) (tpl (.Files.Get "files/config.tpl") . | отступ 4) -}} добавлен лишний дефис для поддержки нескольких строк попробуйте это?