【问题标题】:Helm : How do we decide indent value in helm templates?Helm:我们如何决定 helm 模板中的缩进值?
【发布时间】:2020-07-31 17:44:07
【问题描述】:

我见过{{ toYaml .Values.deployment.updateStrategy | indent 4 }} - 这是在我们的一个 helm 部署 yaml 中。我想知道如何确定缩进为 4?

在同一 yaml 的另一行 {{ toYaml .Values.imagePullSecrets | indent 8 }} 中,缩进设置为 8。

如何计算 yaml 文件中的缩进值?

【问题讨论】:

    标签: kubernetes-helm helmfile


    【解决方案1】:

    缩进 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: 属性的一部分。

    现在将输出从 4 个空格更改为 8 个空格

    如果我们将缩进更改为 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 验证器。

    现在将输出从 4 个空格更改为 1 个空格(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 }}? 以更好地理解为什么缩进在源代码中看起来不错,但会产生无效的输出。

    【讨论】:

      猜你喜欢
      • 2022-08-16
      • 1970-01-01
      • 2020-06-19
      • 2019-01-19
      • 2021-12-07
      • 2020-01-12
      • 2020-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多