[英]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
function 加载模板文件并通过values.yml
分别访问所有需要的字段?
如果.Values.config
包含 json 那么你可以在你的模板化秘密中使用它
{{ .Values.config | toJson | b64enc | quote }}
使用toJson
将 JSON 转换为 JSON 似乎很奇怪,但是 helm 在您告诉它之前不会本机将其视为 JSON。 有关执行此操作的示例,请参阅 SO 问题如何在 yaml 文件 (Helm) 中使用 json 变量。
如果您想避免编码,这是另一个建议:
env:
- name: MYCONFIG
value: {{ .Files.Get "config.json" | toPrettyJson }}
根据helm docs ,helm 使用了诸如toPrettyJson
模板函数,这些函数由内置的 Go text/template 包和Sprig 模板函数库提供。
当将某些内容传递给 --set 或 --set-string 并且您不希望 helm 解释它时,您想转义每一个 =
{
[
,
.
]
}
带反斜杠。 请记住您的 shell 可能会解释 \\,因此有时您可能希望在单个配额中使用 \\ 或 value。 像这样的东西在 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+)}}
替换为{{
{{ }}$1{{
}} }}
有点帮助。
你可以从yaml
文件中做到这一点很容易像这样
# ... values.yaml
myspecialvalue:
somefield: 'some string'
# ... more stuff if you'd like
然后在您的 helm 文件之一中,您可以像这样引用它
# ... cron.yaml
kind: CronJob
metadata:
name: ...
namespace: ...
spec:
schedule: ...
jobTemplate:
spec:
template:
spec:
containers:
- name: some-container
image: ...
command: ...
env:
- name: SOME_ENVIRONMENT_VARIABLE
value: {{ .Values.myspecialvalue | toJson | quote }}
# ... more stuff if you'd like
这会将适当引用的json
字符串作为环境变量传递给您的 pod,如下所示
'{"somefield: "some string"}'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.