【发布时间】:2021-05-15 18:49:42
【问题描述】:
我将尝试重现 helm 模板函数的一个非常奇怪的行为(或者可能是我的误解),该函数基本上检测 values.yaml 文件中是否存在节点。其实没那么简单,但它是显示问题的最简单方法:
我使用的是 v2.16.1 helm 版本,但它是在较新的 3.3 上复制的。 请按照以下步骤操作:
- 创建示例图表
helm create myChart
- 将函数附加到 myChart 帮助器
cat << EOF >> myChart/templates/_helpers.tpl {{- define "myChart.hasNodeA" -}} {{- \$found := false -}} {{- if .Values.A -}} {{- \$found := true -}} {{- end -}} {{- print \$found -}} {{- end -}} EOF
(注意美元转义,这只是为了方便您使用 cat/EOF 附加函数)
- 在部署中附加渲染条件:
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
- 在不使用和使用节点的情况下进行渲染:
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