将文件注入Helm模板

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

我在

values.yaml
中定义了一系列属性,如下所示:

files:
 - "file1"
 - "file2"

然后在我的模板中,我想根据我的值创建配置映射。

我想出了以下模板:

{{- range $value := .Values.files }}
---
apiVersion: v1
kind: ConfigMap
metadata: 
    name: {{ $value }}
data:
    {{ $value }}: {{ .Files.Get (printf "%s/%s" "files" $value) | indent 4 }}
{{- end }}

如您所见,我希望配置映射与文件同名。我混淆了文档的几个部分,但是我的模板无法按预期工作。

如何通过模板实现configmap创建?

//编辑 我期望有以下 ConfigMap:

apiVersion: v1
kind: ConfigMap
metadata: 
    name: file1
data:
    file1: <file1 content>
---
apiVersion: v1
kind: ConfigMap
metadata: 
    name: file2
data:
    file2: <file2 content>
kubernetes kubernetes-helm
3个回答
2
投票

尝试以下操作:

{{- $files := .Files }}
{{- range $value := .Values.files }}
---
apiVersion: v1
kind: ConfigMap
metadata: 
  name: {{ $value }}
  data:
    {{ $value }}: |
{{ $files.Get (printf "%s/%s" "files" $value) | indent 6 }}
{{- end }}

您的问题似乎是缩进不正确。确保以

$files.Get
开头的行没有空格。

我还添加了

{{- $files := .Files }}
来访问
.Files
,因为由于某种原因
range
正在更改
.
范围。

我在文档中找到了这个示例,但它似乎仅在文件内容为一行时才有效。因此,如果您的文件只有一行,那么您应该检查示例。

另请注意

|
之后的
{{ $value }}:
。您需要它,因为文件内容是多行字符串。检查 this StackQuestion 了解如何在 yaml 中使用多行字符串。


0
投票

尝试以下操作

{{ $currentScope := .}}
{{- range $value := .Values.files }}
---
apiVersion: v1
kind: ConfigMap
metadata:
    name: {{ $value }}
data:
    {{- with $currentScope}}
        {{ $value }}: {{ .Files.Get (printf "%s/%s" "files" $value) | indent 4 }}
    {{- end }}
{{- end }}

我的图表结构

├── Chart.yaml
├── charts
├── files
│   ├── file1
│   └── file2
├── templates
│   ├── configmap.yaml
│   ├── deployment.yaml
│   ├── secret.yaml
│   └── service.yaml
└── values.yaml

0
投票

现在可以使用 Files.Glob 分别使用

AsConfig
AsSecret
将文件内容渲染到 ConfigMaps 和 Secrets 中

例如

apiVersion: v1
kind: ConfigMap
metadata:
  name: MyConifg
data:
{{ (.Files.Glob "files/*").AsConfig | indent 2 }}

在这个简单的情况下,您最终会得到 1 个 ConfigMap,其中包含每个文件的一个条目,并进行了正确的转义和格式化,但可以轻松地使用

range
块进行调整以创建多个 ConfigMap

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