【问题标题】:Helm template function to detect node within values.yaml用于检测 values.yaml 中的节点的 Helm 模板函数
【发布时间】:2021-05-15 18:49:42
【问题描述】:

我将尝试重现 helm 模板函数的一个非常奇怪的行为(或者可能是我的误解),该函数基本上检测 values.yaml 文件中是否存在节点。其实没那么简单,但它是显示问题的最简单方法:

我使用的是 v2.16.1 helm 版本,但它是在较新的 3.3 上复制的。 请按照以下步骤操作:

  1. 创建示例图表
helm create myChart
  1. 将函数附加到 myChart 帮助器
cat << EOF >> myChart/templates/_helpers.tpl

{{- define "myChart.hasNodeA" -}}
    {{- \$found := false -}}
    {{- if .Values.A -}}
        {{- \$found := true -}}
    {{- end -}}
    {{- print \$found -}}
{{- end -}}
EOF

(注意美元转义,这只是为了方便您使用 cat/EOF 附加函数)

  1. 在部署中附加渲染条件:
cat << EOF >> myChart/templates/deployment.yaml
{{- if eq (include "myChart.hasNodeA" .) "true" }}
  hasNodeA: "yes"
{{- end }}
{{- if eq (include "myChart.hasNodeA" .) "false" }}
  hasNodeA: "no"
{{- end }}
EOF
  1. 在不使用和使用节点的情况下进行渲染:
helm template myChart | grep hasNodeA

这里显示“否”,虽然是“正确”,但因为函数总是返回'false'

添加节点:

cat << EOF >> myChart/values.yaml
A:
  whatever: 555
EOF

你会看到问题:

helm template myChart | grep hasNodeA

这个节目再次“不”。

事实上,如果您测试这个功能条件(编辑 _helpers.tpl 文件,将打印输出移到中间),功能条件正在满足:

{{- define "myChart.hasNodeA" -}}
    {{- $found := false -}}
    {{- if .Values.A -}}
        {{- $found := true -}}
        {{- print $found -}}
    {{- end -}}
{{- end -}}

你会看到条件真的通过了

$> helm template myChart | grep hasNodeA
hasNodeA: "yes"

显然这不适用于负面情况。 这里奇怪的是,条件内配置的变量在最后打印时似乎被忽略了。

对此行为有任何想法吗? 谢谢你

【问题讨论】:

    标签: kubernetes-helm go-templates


    【解决方案1】:

    在 Helm 中,使用运算符 := 在其上下文中创建一个新变量。在这种情况下,您将创建一个新的 $found 变量。在 Helm v3 中,您可以使用 = 运算符解决此问题。

    如果您使用的是 Helm v2,那么这将使用大量 if 来解决。

    BR

    【讨论】:

    • 好的,我在 helm2(不是 helm3)上测试了“=”。由于我们正在转向 helm3,我将按照您所说的再次测试...然后,我假设 helm2 面对这种情况非常有限。
    • 好的,终于在helm3上工作了,所以我觉得对我来说已经足够了。我们必须第一次使用“:=”,然后只需分配(=): {{-define "myChart.hasNodeA" -}} {{- $found := false -}} {{- if .Values. A -}} {{- $found = true -}} {{- end -}} {{- print $found -}} {{- end -}}
    猜你喜欢
    • 2022-08-03
    • 2022-08-16
    • 2019-09-21
    • 1970-01-01
    • 2020-12-05
    • 2021-12-18
    • 2021-06-17
    • 2022-12-17
    相关资源
    最近更新 更多