【发布时间】:2020-07-31 17:44:07
【问题描述】:
我见过{{ toYaml .Values.deployment.updateStrategy | indent 4 }} - 这是在我们的一个 helm 部署 yaml 中。我想知道如何确定缩进为 4?
在同一 yaml 的另一行 {{ toYaml .Values.imagePullSecrets | indent 8 }} 中,缩进设置为 8。
如何计算 yaml 文件中的缩进值?
【问题讨论】:
我见过{{ toYaml .Values.deployment.updateStrategy | indent 4 }} - 这是在我们的一个 helm 部署 yaml 中。我想知道如何确定缩进为 4?
在同一 yaml 的另一行 {{ toYaml .Values.imagePullSecrets | indent 8 }} 中,缩进设置为 8。
如何计算 yaml 文件中的缩进值?
【问题讨论】:
缩进 4 或 8 取决于 YAML 文件的当前缩进。如果您需要输出为 4 个空格,则使用 4,如果您需要输出为 8 个空格(与周围的 YAML 对齐,则使用 8)。
例如,创建一个图表:
mkdir testing-helm
cd testing-helm
helm create anvil
head -7 anvil/templates/service.yaml
你会看到:
apiVersion: v1
kind: Service
metadata:
name: {{ include "anvil.fullname" . }}
labels:
{{- include "anvil.labels" . | nindent 4 }}
spec:
所以在本例中,输出缩进 4 个空格。当通过helm template anvil 生成输出时,您会看到:
# Source: anvil/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: RELEASE-NAME-anvil
labels:
helm.sh/chart: anvil-0.1.0 # <<<--- From Template
app.kubernetes.io/name: anvil # <<<--- From Template
app.kubernetes.io/instance: RELEASE-NAME # <<<--- From Template
app.kubernetes.io/version: "1.16.0" # <<<--- From Template
app.kubernetes.io/managed-by: Helm # <<<--- From Template
spec:
请注意,模板的输出在每行前有 4 个空格,因此输出显然是 labels: 属性的一部分。
如果我们将缩进更改为 8,语法将如下所示:
# Source: anvil/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: RELEASE-NAME-anvil
labels:
helm.sh/chart: anvil-0.1.0 # <<<--- From Template
app.kubernetes.io/name: anvil # <<<--- From Template
app.kubernetes.io/instance: RELEASE-NAME # <<<--- From Template
app.kubernetes.io/version: "1.16.0" # <<<--- From Template
app.kubernetes.io/managed-by: Helm # <<<--- From Template
spec:
请注意,模板的输出现在每行前有 8 个空格。
因此选择数字以适当地格式化 YAML。根据周围的 YAML,生成的输出可能会产生格式错误的 YAML 语法,这会在尝试解析它时导致错误。
如果您想查看更改是否有效,可以使用http://www.yamllint.com/ 的在线 YAML 验证器。
将输出更改为 1 个空格时,生成的 YAML 无效。
运行helm template 会报错:
helm template anvil
Error: YAML parse error on anvil/templates/service.yaml: error converting YAML to JSON: yaml: line 5:
did not find expected key
Use --debug flag to render out invalid YAML
当我添加 --debug 标志时,我可以看到以下输出,它不再是有效的 YAML 语法。
helm template anvil --debug
. . . trimmed output . . .
# Source: anvil/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: RELEASE-NAME-anvil
labels:
helm.sh/chart: anvil-0.1.0 # <<<--- From Template
app.kubernetes.io/name: anvil # <<<--- From Template
app.kubernetes.io/instance: RELEASE-NAME # <<<--- From Template
app.kubernetes.io/version: "1.16.0" # <<<--- From Template
app.kubernetes.io/managed-by: Helm # <<<--- From Template
another: value # I added
spec:
我添加了正确缩进的another: value,以便更容易看到模板中的缩进无效。
以下是anvil/templates/service.yaml 文件查找上述测试的方式:
head -8 anvil/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: {{ include "anvil.fullname" . }}
labels:
{{- include "anvil.labels" . | nindent 1 }}
another: value
spec:
因此,即使源代码看起来缩进正确,但生成的结果输出格式不正确。也可以看看 What is the difference between helm syntax {{ something }} and {{- something }}? 以更好地理解为什么缩进在源代码中看起来不错,但会产生无效的输出。
【讨论】: