使用外部 yaml 文件为 kubernetes 创建 configmap
Create configmap with outside yaml files for kubernetes
我对 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 模板;
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Values.cars.name }}-configmap
data:
{{- range .Files }}
{{ .Files.Get . | toYaml | quote }}
{{- end }}
我遇到的唯一问题是无法获取整个文件数据。
欢迎来到社区!
我已经为 configmap
创建了一个 helm 模板。它以这种方式工作:您可以传递 configmap 名称 - name
和文件名 - fname
存储数据的地方 and/or 它可以从特定文件夹读取文件。
请找到模板(前 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 我共享文件示例和 configmap 的地方。
要使用 userfiles
目录中的 cars2.yaml
和 with/without 文件呈现模板:
helm template . --set name=cars2 --set fname=cars2.yaml
要仅使用 userfiles
目录中的文件渲染同一模板:
helm template .
P.S。使用了 helm v3.5.4
有用的链接:
我对 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 模板;
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Values.cars.name }}-configmap
data:
{{- range .Files }}
{{ .Files.Get . | toYaml | quote }}
{{- end }}
我遇到的唯一问题是无法获取整个文件数据。
欢迎来到社区!
我已经为 configmap
创建了一个 helm 模板。它以这种方式工作:您可以传递 configmap 名称 - name
和文件名 - fname
存储数据的地方 and/or 它可以从特定文件夹读取文件。
请找到模板(前 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 我共享文件示例和 configmap 的地方。
要使用 userfiles
目录中的 cars2.yaml
和 with/without 文件呈现模板:
helm template . --set name=cars2 --set fname=cars2.yaml
要仅使用 userfiles
目录中的文件渲染同一模板:
helm template .
P.S。使用了 helm v3.5.4
有用的链接: