【问题标题】:How to use a Json file as a source of Values for Helm?如何使用 Json 文件作为 Helm 值的来源?
【发布时间】:2020-12-07 14:33:09
【问题描述】:

我有一个简单的 json 配置文件,格式如下:

{
   "applications" : [
       {
           "appName": "app1"
       },
       {
           "appName": "app2"
       }
   ]
}

现在我有 2 个 helm 图表定义每个应用程序的部署:

apiVersion: v1
kind: Deployment
metadata:
  name: app1
# etc, etc, etc
---
apiVersion: v1
kind: Deployment
metadata:
  name: app2
# etc, etc, etc

我想做的是在安装时加载该 json 配置文件并使用它来生成所需的部署图表,如下所示:

# "config" holds the loaded json file
{{- range .Values.config.applications }}
apiVersion: v1
kind: Deployment
metadata:
  name: {{ .appName | quote }}
{{- end}}

这可能吗?我在这里尝试了很多答案,但几乎所有答案都与通过配置映射将 json 文件传递​​给应用程序有关。如何在 helm 中加载 json 文件并使用图表本身中的值?请注意,其他应用程序也在使用此文件,因此我不能将其更改为 YAML 文件或类似的文件。

【问题讨论】:

    标签: json kubernetes-helm


    【解决方案1】:

    Helm 具有a couple of undocumented functions,包括fromJson 函数。 (或者,如果您希望顶级对象是一个数组,fromJsonArray。)您应该能够将它与 file-retrieval calls 结合起来,以便能够执行以下操作:

    {{- $config := .Files.Get "config.json" | fromJson }}
    {{- range $config.applications }}
    name: {{ .appName | quote }}
    {{/* and otherwise as you have it in the question */}}
    {{- end }}
    

    【讨论】:

      【解决方案2】:

      我设法想出了一个解决方法。

      感谢here 的回答,我发现 python 有一些巧妙的技巧可以从 json 转换为 yaml(因为 json 是 yaml 的子集)。我在运行 helm install 之前添加了一个预处理步骤来转换我的 config.json,如下所示:

      python -c 'import json; import yaml; print(yaml.dump(json.load(open("config.json"))))' > config.yaml
      

      然后我可以通过 -f config.yaml 标志将生成的文件传递给 helm 并通过 .Values 对象引用字段

      【讨论】:

      猜你喜欢
      • 2021-02-16
      • 2019-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-21
      • 2017-06-06
      相关资源
      最近更新 更多