我对 kubernetes 很陌生。我正在尝试使用用户定义的 yaml 文件创建 configmap。
helm upgrade --install test --namespace test --create-namespace . -f xxx/user-defined.yaml
用户可以使用 'f' 选项添加任何 yaml 文件。 例如;
cars.yaml
cars:
- name: Mercedes
model: E350
所以命令将是;
helm upgrade --install test --namespace test --create-namespace . -f xxx/cars.yaml
我的问题是,我想创建名为 'mercedes-configmap' 的 configmap 我需要从cars.yaml 中读取这些值并使用cars.yaml 的名称和数据自动创建configmap
更新, 我创建了下面的 configmap 模板;
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Values.cars.name }}-configmap
data:
{{- range .Files }}
{{ .Files.Get . | toYaml | quote }}
{{- end }}
我面临的唯一问题,我无法获取整个文件数据。
答案 0 :(得分:0)
欢迎来到社区!
我为 configmap
创建了一个 helm 模板。它是这样工作的:您可以传递配置映射名称 - name
和文件名 - fname
存储数据的位置和/或它可以从特定文件夹读取文件。
请找到模板(前 3 行已注释,这是检查现有值的两个工作逻辑实现):
{{/*
{{ if not (or (empty .Values.name) (empty .Values.fname)) }}
*/}}
{{ if and (not (empty .Values.name)) (not (empty .Values.fname)) }}
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Values.name }}-configmap
data:
{{- ( .Files.Glob .Values.fname ).AsConfig | nindent 2 }}
---
{{ end }}
{{ $currentScope := .}}
{{ range $path, $_ := .Files.Glob "userfiles/*.yaml" }}
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ base $path | trimSuffix ".yaml" }}-configmap
data:
{{- with $currentScope}}
{{ base $path }}: |
{{- ( .Files.Get $path ) | nindent 4 }}
{{- end }}
---
{{ end }}
template
的第一部分检查是否设置了 configmap 名称和文件名,如果是,则呈现它。第二部分转到 userfiles
目录并获取其中的所有 yamls
。
您发现 github repo 是我共享文件示例和配置映射的地方。
要在 cars2.yaml
目录中呈现带有/不带有 userfiles
文件的模板:
helm template . --set name=cars2 --set fname=cars2.yaml
要渲染仅包含 userfiles
目录中的文件的相同模板:
helm template .
附言使用 helm v3.5.4
有用的链接: