Жалуется не только синтаксический анализатор YAML: на самом деле это недопустимый YAML (потому что {...}
является синтаксисом встроенного сопоставления). Похоже, это исходит от инструмента развертывания Kubernetes Helm , и некоторые рутинные, но интересные применения действительно требуют рендеринга YAML.
На практике вы, вероятно, захотите использовать helm template
, чтобы отобразить диаграмму в многодокументном YAML, а затем запустить на ней валидатор YAML. Кажется, это не задокументировано, но Helm версии 3 фактически выполняет эту проверку самостоятельно (Helm 2 этого не делает), поэтому, если ваша диаграмма выдает недопустимый YAML, вы получите ошибку в этот момент.
Как работает Helm, он интерпретирует этот "YAML" файл как простой текстовый файл и применяет к нему шаблон Go text/template
, а затем считывает его обратно как YAML. В некоторой степени вы могли бы сделать этот YAML корректным, цитируя строки самостоятельно:
name: "{{ .Release.Name }}-configmap"
Но есть некоторые довольно распространенные конструкции, в которых это фактически нарушит сгенерированный YAML. Например, шаблон helm create
генерирует
{{/* _helpers.tpl */}}
{{- define "<CHARTNAME>.labels" -}}
helm.sh/chart: {{ include "<CHARTNAME>.chart" . }}
{{- end -}}
metadata:
name: {{ include "<CHARTNAME>.fullname" . }}
labels:
{{- include "<CHARTNAME>.labels" . | nindent 4 }}
, и никакое цитирование не сделает этот YAML действительным. Очень возможно поместить во вспомогательный шаблон «метки» что-то, что недопустимо в контексте сопоставления YAML, и вы хотите уловить это на этапе проверки.