使用 YAML 语法从文件创建配置映射的正确方法是什么?



我可以创建一个ConfigMap而不会出现kubectl create configmap settings --from-file settings.yaml问题,但我不想手动创建它,而是作为helm install的一部分。

所以,我创建了一个模板文件:

apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Values.settingsConfigMap }}
data:
settings.yaml: |-
{{ .Files.Get "settings.yaml" | indent 4}}

但每当我运行helm install时,我都会收到一个错误,说

io.k8s.api.core.v1.ConfigMap.data的无效类型:get"map";,预期的";字符串";

那么,在Helm从YAML文件加载内容的情况下,我能做些什么来创建这个ConfigMap呢?

更新

事实证明,上面提到的错误与缩进的一些问题有关。通过删除indent 4,我设法更进一步,但现在它失败了,因为我的所有设置都被检测为unknown fields,例如:

未知字段"客户";在io.k8s.api.core.v1.ConfigMap中,ValidationError(ConfigMap(:未知字段";deploy_name";在io.k8s.api.core.v1.ConfigMap中,ValidationError(ConfigMap(:未知字段";系统";在io.k8s.api.core.v1.ConfigMap 中

deploy_namesystemcustomers是我的settings.yaml文件的顶级密钥。

我找到了答案。

更新中提到的错误是删除indent 4的结果。通过删除它,Helm使用的YAML就被搞砸了,因此它不理解这些字段。

那么,当我有indent 4的时候,为什么它失败了呢?原因是}之前缺少空白。有了{{ .Files.Get "settings.yaml" | indent 4 }},一切都很好。

相关内容