繁体   English   中英

如何将整个 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 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM