如何将整个JSON字符串传递给Helm图表值?
我有values.yml
,其中config值应包含带有应用程序配置的整个JSON
...
config: some JSON here
...
我需要将此值传递给一个秘密模板,然后将其作为卷安装到Kubernetes容器中。
{{- $env := default "integration" .Values.env}}
apiVersion: v1
kind: Secret
metadata:
name: {{ .Release.Name }}-{{ $env }}
type: Opaque
data:
config.json: {{ .Values.config | b64enc | quote }}
但是,传递诸如'{"redis": "localhost:6379"}'
之类的单引号字符串的明显方法失败了,因为Helm由于某种原因删除了字符串中的所有双引号(即使我将其转义了),所以我最终得到了{redis: localhost:6379}
不是有效的JSON。
是否还有其他可能如何一次将配置全部传递到Pod,而无需使用tpl
函数加载模板文件并使所有需要的字段分别通过values.yml
进行访问?
答案 0 :(得分:5)
如果.Values.config
包含json,那么您可以在带有{{ .Values.config | toJson | b64enc | quote }}
的模板化Secret中使用它。使用toJson
将json转换为json似乎很奇怪,但是helm在告诉您之前不会将其本机视为json。有关执行此操作的示例,请参见SO问题How do I use json variables in a yaml file (Helm)。
答案 1 :(得分:0)
如果您想避免编码,这里是另一个建议:
(-> "{::namespaced \"ko\" }"
(#(string/replace % #"::" ":some.namespace/"))
(edn/read-string))
根据helm docs,helm使用模板功能,例如env:
- name: MYCONFIG
value: {{ .Files.Get "config.json" | toPrettyJson }}
,它们由内置的Go文本/模板包和Sprig template function library提供。
答案 2 :(得分:0)
当将某些东西传递给--set或--set-string时,如果您不希望掌舵者对其进行解释,则希望转义每一个of =
{
[
,
.
]
}
带反斜杠。记住关于外壳程序的解释,所以有时您可能想要\或在单个配额中使用value。 像这样的东西对我来说很有效:
--set airflow.config.AIRFLOW__SECRETS__BACKEND_KWARGS='\{\\\"variables_prefix\\\": \\\"/here-is-my-prefix/'${bamboo_deploy_environment}'/airflow/variables\\\"\, \\\"connections_prefix\\\": \\\"/here-is-my-prefix/'${bamboo_deploy_environment}'/airflow/connections\\\"\}'
答案 3 :(得分:0)
不要忘记转义这个 JSON:
在 Notepad++ 正则表达式中,将 {{(\w+)}}
替换为 {{
{{}}$1{{
}}}}
有所帮助。