vs code 格式化 yaml 文件,括号之间有额外空格

问题描述 投票:0回答:3

我使用vscode作为编辑器,项目中有几个发生参数替换的yaml文件。但是,它仅重新格式化一个文件,其中括号之间有额外的空格,该文件是 helm 在我们的 ci/cd 管道中使用的名为 service.yaml 的文件。请参阅下面的之前和之后。

以及之后

我想知道文件名对于 vscode 或任何其他扩展是否有特殊意义......谢谢。

visual-studio-code yaml kubernetes-helm
3个回答
6
投票

取消选中

Bracket Spacing
中的
Extensions/YAML

编辑:有一个警告。这会将

{{ foo }}
{ { foo } }
格式化为
{{foo}}
,就 Jinja 模板而言,这在语法上不一定正确。


2
投票

解决此问题的方法之一 - 将值括在引号中。

像这样:

app: "{{ .Values.name }}"

可能不是最好的解决方案,但它对我有用。


0
投票

TL;DR - 只需将所有 helm .yaml 文件添加到 .prettierignore,因为它们包含 go 文本模板并且无论如何都不应该是有效的 YAML。

完整解释

我在 Prettier 上遇到了同样的问题,并做了一些调查。实际的答案是 helm 生成的 service.yaml 文件看起来像实际的 YAML,其中

{{...}}
中包含的所有内容都被解释为一个值。当 prettier 在 service.yaml 上运行时,它只是根据 prettier 设置格式化文件内容,并且 prettier 控制台显示成功的 prettier 运行:

["INFO" - 10:37:59 PM] Formatting completed in 20ms.

这会使文件处于错误状态,因为

{ { .Values.service.port } }
不是有效的 go 模板,因此无法由 helm 渲染。

但是,所有其他 helm 生成的 .yaml 文件都有一些用于在不属于有效 YAML 语法的地方渲染文本的 go 模板。例如,我的 serviceaccount.yaml 文件开头为:

{{- if .Values.serviceAccount.create -}}
apiVersion: v1
kind: ServiceAccount
metadata:
...

请注意,这不是有效的 YAML 语法,因此 Prettier 会抛出错误,并在 Prettier 控制台中输出类似以下内容:

["ERROR" - 10:21:24 PM] Error formatting document.
["ERROR" - 10:21:24 PM] Document contains trailing content not separated by a ... or --- line (2:1)
   1 | {{- if .Values.serviceAccount.create -}}
>  2 | apiVersion: v1
     | ^^^^^^^^^^^^^^
>  3 | kind: ServiceAccount
     | ^^^^^^^^^^^^^^^^^^^^
>  4 | metadata:
     | ^^^^^^^^^^^^^^^^^^^^
...<a whole lot of other errors followed by a stack trace>
["INFO" - 10:21:24 PM] Formatting completed in 21ms.

(好吧,好吧,从技术上讲,第一行实际上是有效的 YAML 文档,但在下一行中跟随

apiVersion: v1
需要在流中使用
...
---
线在流中使用新的文档分隔符,这会破坏无论如何掌舵)

由于 prettier 无法成功将文件格式化为 YAML,因此它只会按原样保留文件。

由于 helm 模板并非纯 YAML,因此解决方案很可能只是将所有这些文件添加到 .prettierignore 并继续生活。

© www.soinside.com 2019 - 2024. All rights reserved.