如何忽略helm chart中的一些模板?

问题描述 投票:0回答:2

我正在阅读 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 }}
kubernetes kubernetes-helm
2个回答
0
投票

可以用简单的

if
语句来完成。

你的

template
文件

{{- if .Values.serviceAccount.enabled -}}
...
{{- end }}

你的

values
文件

serviceAccount:
  enabled: true/false

您也可以对嵌套和有条件的资源执行相同的操作,将

volumet
添加到您的
deployment


0
投票

我要建议的是沿着 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
- 如果你不是(我猜你可能需要去掉单引号
''
.

© www.soinside.com 2019 - 2024. All rights reserved.