【问题标题】:How to pass entire JSON string to Helm chart value?如何将整个 JSON 字符串传递给 Helm 图表值?
【发布时间】:2019-05-31 00:27:57
【问题描述】:

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

是否有任何其他可能性如何在不使用 tpl 函数加载模板文件并分别通过 values.yml 访问所有需要的字段的情况下一次性将配置传递给 pod?

【问题讨论】:

    标签: json kubernetes kubernetes-helm


    【解决方案1】:

    如果.Values.config 包含 json,那么您可以在模板化密钥中使用它

    {{ .Values.config | toJson | b64enc | quote }}
    

    使用toJson 将 JSON 转换为 JSON 可能看起来很奇怪,但 helm 本身并不将其视为 JSON,直到您告诉它。有关执行此操作的示例,请参阅 SO 问题 How do I use json variables in a yaml file (Helm)

    【讨论】:

    • 另一种方法是将 json 放在图表底部的文件中并使用 {{ .Files.Get "config.json" | b64enc | quote } 加载它或使用 .Files.Glob 和 AsSecrets 但我猜你特别想要内容在值文件中。
    • 是的,我需要 .Values.config 中的 JSON,因为我们使用 Rancher。因此,我们在图表中有questions.yml,该值通过 Rancher CLI 或 GUI 以交互方式填充
    【解决方案2】:

    如果你想避免编码,这里有另一个建议:

    env:
      - name: MYCONFIG
      value: {{ .Files.Get "config.json" | toPrettyJson }}
    

    根据helm docs,helm 使用了诸如toPrettyJson 等模板函数,这些函数由内置的 Go 文本/模板包和Sprig template function library 提供。

    【讨论】:

      【解决方案3】:

      当将某些东西传递给 --set 或 --set-string 并且您不希望 helm 解释它时,您希望转义每个 of=

      {
      [
      ,
      .
      ]
      }
      

      带有反斜杠。请记住您的 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\\\"\}'
      

      【讨论】:

        【解决方案4】:

        别忘了转义这个 JSON:

        在 Notepad++ 正则表达式中将 {{(\w+)}} 替换为 {{{{}}$1{{}}}} 有点帮助。

        【讨论】:

          猜你喜欢
          • 2018-05-07
          • 2020-07-07
          • 2019-11-16
          • 2018-11-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-07-04
          • 2015-07-01
          相关资源
          最近更新 更多