如何将整个 JSON 字符串传递给 Helm 图表值?
How to pass entire JSON string to Helm chart value?
如何将整个 JSON 字符串传递给 Helm 图表值?
我有 values.yml
,其中配置值应包含整个 JSON 以及应用程序的配置
...
config: some JSON here
...
我需要将这个值传递给一个秘密模板,然后将它作为一个卷挂载到 Kubernetes pod。
{{- $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
访问?
如果 .Values.config
包含 json 那么你可以在你的模板秘密中使用它
{{ .Values.config | toJson | b64enc | quote }}
使用 toJson
将 JSON 转换为 JSON 似乎很奇怪,但 helm 本身不会将其视为 JSON 直到您告诉它。有关执行此操作的示例,请参见 SO 问题 。
如果您想避免编码,这里有另一个建议:
env:
- name: MYCONFIG
value: {{ .Files.Get "config.json" | toPrettyJson }}
根据helm docs, helm uses template functions such as toPrettyJson
which are supplied by the built-in Go text/template package and the Sprig template function library。
当将某些东西传递给 --set 或 --set-string 并且您不希望 helm 解释它时,您想要转义每一个 =
{
[
,
.
]
}
带反斜杠。请记住您的 shell 可能会解释 \ 因此有时您可能想要 \ 或使用单个配额中的值。
在 bash:
中这样的东西对我有用
--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\\"\}'
别忘了转义这个 JSON:
在 Notepad++ 中将 {{(\w+)}}
的正则表达式替换为 {{
{{}}{{
}}}}
有点帮助。
如何将整个 JSON 字符串传递给 Helm 图表值?
我有 values.yml
,其中配置值应包含整个 JSON 以及应用程序的配置
...
config: some JSON here
...
我需要将这个值传递给一个秘密模板,然后将它作为一个卷挂载到 Kubernetes pod。
{{- $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
访问?
如果 .Values.config
包含 json 那么你可以在你的模板秘密中使用它
{{ .Values.config | toJson | b64enc | quote }}
使用 toJson
将 JSON 转换为 JSON 似乎很奇怪,但 helm 本身不会将其视为 JSON 直到您告诉它。有关执行此操作的示例,请参见 SO 问题
如果您想避免编码,这里有另一个建议:
env:
- name: MYCONFIG
value: {{ .Files.Get "config.json" | toPrettyJson }}
根据helm docs, helm uses template functions such as toPrettyJson
which are supplied by the built-in Go text/template package and the Sprig template function library。
当将某些东西传递给 --set 或 --set-string 并且您不希望 helm 解释它时,您想要转义每一个 =
{
[
,
.
]
}
带反斜杠。请记住您的 shell 可能会解释 \ 因此有时您可能想要 \ 或使用单个配额中的值。 在 bash:
中这样的东西对我有用--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\\"\}'
别忘了转义这个 JSON:
在 Notepad++ 中将 {{(\w+)}}
的正则表达式替换为 {{
{{}}{{
}}}}
有点帮助。