外部文件
外部文件
有时需要导入不是模板的文件,并注入其内容而不通过模板渲染器发送内容。.Files
对象提供对文件的访问。在我们开始使用模板示例之前,需要注意一些关于它如何工作的内容:
-
向
Helm chart 添加额外的文件是可以的。这些文件将被捆绑并发送给Tiller 。不过要注意,由于Kubernetes 对象的存储限制,chart 必须小于1M 。 -
通常出于安全原因,某些文件不能通过
.Files
对象访问。templates / 无法访问文件。- 使用
.helmignore
排除的文件不能被访问。
-
chart 不保留UNIX 模式信息,因此文件级权限在涉及.Files
对象时不会影响文件的可用性。
基本示例
我们编写一个模板,从三个文件读入我们的
config1.toml
:
message = Hello from config 1
config2.toml
:
message = This is config 2
config3.toml
:
message = Goodbye from config 3
这些都是一个简单的
apiVersion: v1
kind: ConfigMap
metadata:
name: {{.Release.Name}}-configmap
data:
{{- $files := .Files}}
{{- range tuple "config1.toml" "config2.toml" "config3.toml"}}
{{.}}: |-
{{$files.Get .}}
{{- end}}
这个配置映射使用了前几节讨论的几种技术。例如,我们创建一个 $files
变量来保存 .Files
对象的引用。我们还使用该 tuple
函数来创建我们循环访问的文件列表。然后我们打印每个文件名({{.}}: |-
{{ $files.Get . }}
。运行这个模板将产生一个包含所有三个文件内容的
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: quieting-giraf-configmap
data:
config1.toml: |-
message = Hello from config 1
config2.toml: |-
message = This is config 2
config3.toml: |-
message = Goodbye from config 3
路径助手
在处理文件时,对文件路径本身执行一些标准操作会非常有用。为了协助这个能力,Base
变成 base
,等等导入的功能是:
- Base
- Dir
- Ext
- IsAbs
- Clean
Glob 模式
随着Files.Glob(pattern string)
方法通过具有灵活性的模式 glob patterns 协助提取文件。.Glob
返回一个 Files
类型,所以可以调用 Files
返回对象的任何方法。
例如,想象一下目录结构:
foo/:
foo.txt foo.yaml
bar/:
bar.go bar.conf baz.yaml
{{$root := .}}
{{range $path, $bytes := .Files.Glob "**.yaml"}}
{{$path}}: |-
{{$root.Files.Get $path}}
{{end}}
或
{{range $path, $bytes := .Files.Glob "foo/*"}}
{{$path.base}}: '{{ $root.Files.Get $path | b64enc }}'
{{end}}
ConfigMap 和Secrets 工具函数
想要将文件内容放置到Files
类型上提供了一些实用的方法。为了进一步组织文件,将这些方法与 Glob
方法结合使用尤其有用。根据上面的
apiVersion: v1
kind: ConfigMap
metadata:
name: conf
data: { { - (.Files.Glob "foo/*").AsConfig | nindent 2 } }
---
apiVersion: v1
kind: Secret
metadata:
name: very-secret
type: Opaque
data: { { (.Files.Glob "bar/*").AsSecrets | nindent 2 } }
编码
我们可以导入一个文件,并使用
apiVersion: v1
kind: Secret
metadata:
name: {{.Release.Name}}-secret
type: Opaque
data:
token: |-
{{.Files.Get "config1.toml" | b64enc}}
以上例子将采用 config1.toml
文件,我们之前使用的相同文件并对其进行编码:
# Source: mychart/templates/secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: lucky-turkey-secret
type: Opaque
data:
token: |-
bWVzc2FnZSA9IEhlbGxvIGZyb20gY29uZmlnIDEK
行
有时需要访问模板中文件的每一行。Lines
为此提供了一种方便的方法。
data:
some-file.txt: {{range .Files.Lines "foo/bar.txt"}}
{{.}}{{ end }}
目前,无法将 helm install
期间将外部文件传递给helm install -f
或进行加载 helm install --set
。