helm模板开发-访问文件(五)

警告
本文最后更新于 2020-06-23 16:17,文中内容可能已过时。

官方文档:https://v2.helm.sh/docs/chart_template_guide/#glob-patterns Helm提供了通过.Files对象访问文件。但是,在开始使用模板示例之前,需要注意一些有关其工作原理的事情:

  • 可以在Helm chart中添加其他文件。这些文件将被捆绑并发送到Tiller。不过要小心。由于Kubernetes对象的存储限制,图表必须小于1M。
  • .Files通常出于安全原因,某些文件无法通过.Files对象访问。
    • 无法访问templates/中的文件。
    • 无法访问被.helmignore排除的文件。

基本示例:

首先创建三个文件

1
2
3
4
5
6
7
8
#config1.toml
message = "Hello from config 1"

#config2.toml
message = "This is config 2"

#config3.toml
message = "Goodbye from config 3"

我们使用range函数来遍历这些文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  {{- $files := .Files }}
  {{- range list "config1.toml" "config2.toml" "config3.toml" }}
  {{ . }}: |-
    {{ $files.Get . }}
  {{- end }}

渲染后的效果:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# Source: files-demo/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  app: eerie-hydra
data:
  config1.toml: |-
    message = "Hello from config 1"

  config2.toml: |-
    message = "This is config 2"

  config3.toml: |-
    message = "Goodbye from config 3"

glob模式

Files.Glob(pattern string)方法返回所有匹配的文件路径列表,可协助您以全局模式灵活性提取某些文件。

简单示例: 目录结构

1
2
3
4
5
6
7
bar
├── bar.conf
├── bar.go
└── bar.yaml
foo
├── foo.txt
└── foo.yaml
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
apiVersion: v1
kind: ConfigMap
metadata:
  name: glob-test
data:
  {{- $root := . }}
  {{- range $path,$bytes := .Files.Glob "**.yaml" }}
  {{ base $path }}: |-
    {{ $root.Files.Get $path }}
  {{- end -}}

渲染后的效果:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
---
# Source: files-demo/templates/configmap2.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: glob-test
data:
  bar.yaml: |-
    my is bar.yaml

  foo.yaml: |-
    my is foo.yaml
请我喝杯水
SoulChild 微信号 微信号
SoulChild 微信打赏 微信打赏
0%