我正在阅读 helm 文档,
templates/ 目录用于存放模板文件。当 Tiller 评估图表时,它会通过模板渲染引擎发送 templates/ 目录中的所有文件。然后 Tiller 收集这些模板的结果并将它们发送到 Kubernetes。
我的模板文件夹中有很多不同的模板,我正在寻找一种方法来跳过那些以“y”和“z”开头的模板并且不将其发送到 Kubernetes,有什么方法可以实现吗?我想灵活一点,假设 statementProvider 是 x,跳过所有以 y 和 z 开头的清单,并且不将其发送到 Kubernetes。
我写了这个辅助函数来提取应该部署在 Kubernetes 中的资源列表,但我不知道如何使用它:
{{- define "statement.resource"}}
{{- $statementProvider := lower ( $.Values.statementProvider ) -}}
{{- $statementFiles := list -}}
{{- range $path, $bytes := .Files.Glob "templates/**" }}
{{- if eq $statementProvider "x" -}}
{{- if not (or (hasPrefix $path "y") (hasPrefix $path "z")) -}}
{{- $statementFiles = append $statementFiles $path -}}
{{- end }}
{{- $statementFiles -}}
{{- end }}
{{- end }}
{{- end }}
可以用简单的
if
语句来完成。
你的
template
文件
{{- if .Values.serviceAccount.enabled -}}
...
{{- end }}
你的
values
文件
serviceAccount:
enabled: true/false
您也可以对嵌套和有条件的资源执行相同的操作,将
volumet
添加到您的deployment
。
我要建议的是沿着 Michał 已经完成的路线,但进行一些可能对您有用的小调整。
所以,你的
template
可以看起来像这样:
{{- if .Values.apply_template.true }}
...
{{- end }}
并将此添加到您的
values.yaml
:
apply_template:
true: true
false: false
现在,正如您提到的:“要跳过那些以“y”和“z”开头的模板,您可以运行这个简单的
cmd
,它将在以true
开头的模板中用
false
替换
y
和
z
.
find . -type f \( -name "y*.yaml" -o -name "z*.yaml" \) -print0 | xargs -0 sed -i '' "s/true/false/g" | helm template .
您仍然需要更改模板(一次)以添加
if
语句,但除此之外,您可以控制要跳过哪些模板。我只是在几个临时模板上快速测试了这个(并且工作正常),但我希望这能给你一些进展来实现你想做的事。
考虑到我在 OSX 上运行它,你可能需要稍微调整一下
cmd
- 如果你不是(我猜你可能需要去掉单引号''
.