有没有办法将 yaml 数据存储在配置映射中?
在我的
values.yaml
我有类似下面的东西
config:
filters:
- kind: Pod
apiVersion: v1
...
在我的配置图中,我目前正在做
...
data:
config.yaml: |-
{{ .Values.config }}
但是在结果中
configmap
数据被“内联”并格式化为这样
...
data:
config.yaml: >-
map[filters:[map[apiVersion:v1...
这不是
yaml
,因此无法被读取它的应用程序解析。
假设您有一个
demo-chart
:
.
└── demo
├── charts
├── Chart.yaml
├── templates
│ ├── configmap.yaml
│ ├── _helpers.tpl
│ └── NOTES.txt
└── values.yaml
values.yaml:
config:
filters:
- kind: Pod
apiVersion: v1
configmap.yaml:
{{- if .Values.config }}
apiVersion: v1
kind: ConfigMap
metadata:
name: demo-name
data:
config.yml: |- {{- toYaml .Values.config | nindent 4 }}
{{- end }}
说明:
toYaml
将从values.yaml加载的数据解析为YAML,并nindent
在每行前面放置4个空格。
检查:
$ helm template demo
---
# Source: demo/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: demo-name
data:
config.yml: |-
filters:
- apiVersion: v1
kind: Pod
另一个选择是使用
.Files.Get
(请参阅文档):您可以将 YAML 文件(或基本上任何其他文本文件)存储在 template
目录之外,并将原始内容导入到 configmap 中(只需记住| indent
)。
将文本放在单独的文件中的另一个好处是,您的文本编辑器可以识别该语言(yaml、python、bash...),并且您可以利用开发工具的全面支持,这在复杂性时非常方便图表的增长。
例如,假设您的图表已使用
raw-files
目录更新:
mychart
raw-files <<<
│ ├─ example.yaml <<<
│ └─ script.sh <<<
├─ templates
│ ├─ configmap.yaml
│ └─ ...
├─ Chart.yaml
└─ values.yaml
您可以导入
example.yaml
的内容,如下:
apiVersion: v1
kind: ConfigMap
metadata:
name: demo-name
data:
config.yml: |-
{{ .Files.Get "raw-files/example.yaml" | indent 4}}
$ helm template mychart
---
# Source: test/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: demo-name
data:
config.yml: |-
filters:
- kind: Pod
apiVersion: v1
更多的是猜测而不是答案,但你尝试过吗:
data:
config.yaml: |-
config:
filters:
- kind: Pod
apiVersion: v1
yaml 中的
>-
和 |-
之间是有区别的。