我已经看到{{ 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:
因此,即使源看起来缩进正确,生成的结果输出格式也不正确。另请参阅 helm 语法 {{ something }} 和 {{- something }} 有什么区别?为了更好地理解为什么缩进在源代码中看起来不错,但产生的输出无效。