go - 在 Helm 模板中将 YAML 字符串转换为 dict
问题描述
我正在为具有二进制文件的项目创建一个图表,该二进制文件在执行时会生成一个 YAML 格式的配置文件,如下所示:
---
PARAM_1: value1
PARAM_2: value2
我的图表需要读取此文件并将其所有值加载到容器中的环境变量中,因此我在文件中创建了一个变量config
,values.yaml
并且在安装图表时,我使用以下方式传递文件内容--set-file
:
helm install <CHART> --set-file config=/path/to/yaml/config/file
接下来我创建一个ConfigMap
值为.Values.config
:
apiVersion: v1
kind: ConfigMap
metadata:
...
data:
{{ .Values.config }}
我遇到的问题是我需要用以下值做两件事config
:
- 为所有键添加预定义值的前缀(因此在上面的示例中,我将
MY_APP_PARAM_1
作为键) - 确保值都是字符串,否则
ConfigMap
将失败
如何将.Values.config
模板中的值解析为 adict
以便我可以使用range
循环进行这些更改?
解决方案
最后我能够做这样的事情:
{{ $lines := splitList "\n" .Values.config -}}
{{- range $lines }}
{{- if not (. | trim | empty) -}}
{{- $kv := . | splitn ":" 2 -}}
{{ printf "MY_APP_%s: %s" $kv._0 ($kv._1 | trim | quote) | indent 2 }}
{{ end -}}
{{- end -}}
我很难让{{-
vs{{
正确,并helm install --debug --dry-run .
在这部分提供了很多帮助。
这有点乱,所以我很想看看是否有人有更好的解决方案。
推荐阅读
- kendo-grid - Kendo UI JQuery - 网格一键触发多个“读取”、“创建”、“更新”和“销毁”操作
- javascript - 仅在 Web 服务器上运行而不在本地运行的脚本
- javascript - 标题文本没有在reactJs中点击按钮?
- spring-boot - 如何从 Spring WebApplicationContext 中获取 DispatcherServlet?
- android - 当起始滑动点位于可点击视图上时,如何允许滑动视图?
- javascript - 在博客的未来帖子中的主页中显示模糊的图像
- fabricjs - 如何使在fabric js中对多个对象应用过滤器不那么滞后?
- java - @OneToOne 注释错误:引用未知实体:
- php - 如何在 PHP 中发出没有自动换行的 YAML?
- python - 如何在 Heroku + postgresql 上托管的 Ruby on Rails 应用程序中对使用 SQL 查询的数据执行 python ML 脚本