如何将整个JSON字符串传递给Helm图表值?

时间:2019-01-04 12:17:17

标签: json kubernetes kubernetes-helm

如何将整个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进行访问?

4 个答案:

答案 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{{}}}} 有所帮助。