【问题标题】:Helm - only create if nested values are setHelm - 仅在设置嵌套值时创建
【发布时间】:2022-11-24 07:23:16
【问题描述】:

我想知道是否有更有效的方法来排除任何没有设置值的 yaml 键。 我目前的方法是将每个键包装在一个 if 语句中......

container:
  spec:
   {{- if values.spec.x }}
    x: {{ values.spec.x }}
   {{- end}}
   {{- if values.spec.y }}
    y: {{ values.spec.y }}
   {{- end}}
   {{- if values.spec.z }}
    z: {{ values.spec.z }}
   {{- end}}

例如

for each child of container.spec:
  if the value != null:
    include as child of spec
  else:
    exclude from spec

我考虑过将上面的内容包装在 _helper.tpl 函数中以尝试保持主模板整洁,但它仍然包括编写多个 if 语句。

有没有更好的方法来做上面的事情? 谢谢!

【问题讨论】:

    标签: kubernetes-helm go-templates


    【解决方案1】:

    您可以直接将该伪代码转换为 Helm 图表逻辑。诀窍在于 Go 模板 range 循环基本上等同于大多数语言中的“for”循环。所以:

    container:
      spec:
    {{- range $key, $value := .Values.spec }}
    {{- if ne $value nil }}
        {{ $key }}: {{ $value }}
    {{- end }}
    {{- end }}
    

    如果您可以从值中省略未使用的键,那么这将变得更简单和更安全。 Helm 包含一个简单记录的 toYaml 函数,它将把任意结构呈现为 YAML,但在写出之前您不能真正进行任何过滤或其他预处理。

    container:
      spec:
    {{ .Values.spec | toYaml | indent 4 }}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-02
      • 2019-01-19
      • 1970-01-01
      • 2019-02-25
      • 1970-01-01
      相关资源
      最近更新 更多