如何使用 Helm 注入 json 配置?

问题描述 投票:0回答:1

我有一个应用程序需要从 GitLab CI/CD 变量注入各种配置。

Config 的结构如下,设置为 Gitlab CI/CD 变量 DEPLOYTIMECONFIG。需要在部署时将其注入到应用程序中的静态文件中,例如根目录中的“deploytimeconfig.json”。

{
  "envs": [
    {
      "id": "Dev",
      "enabled": true,
      "name": "Dev",
      "web": {
        "baseUrl": "www.website.com",
        "hhUrlApi": {
          "method": "post",
          "url": "www.website.com"
        }
      },
      "dbs": [
        {
          "id": "1",
          "server": "dbserve1r.com",
          "user": "username",
          "password": "pass",
        },
        {
          "id": "2",
          "server": "dbserver2.com",
          "user": "username",
          "password": "pass",
        }
      ]
    },
   // some others envs
  ]
}

我可以通过执行以下操作来获取 .gitlab-ci.yml 中的文件: --set deploytimeconfig={{ DEPLOYTIMECONFIG }} \

然后在配置图中引用它:

apiVersion: v1
kind: ConfigMap
metadata:
    name: {{ .Values.api.name }}
data:
    deploytimeconfig.json: {{ .Values.deploytimeconfig}}

我尝试了 Helm 文档中的 toJson、toPrettyPrint 等各种方法,但似乎无法克服 JSON 解析问题,或者有时文件没有最终出现在项目中。有没有人做过类似的事情并且可以建议我应该如何处理这个问题? JSON 字符需要转义还是类似的?

json kubernetes gitlab yaml kubernetes-helm
1个回答
0
投票

在 Helm 模板级别,实现此目的的最简单方法是结合使用 YAML 块标量语法和 Helm 的

indent
函数。这将使您相当可靠地注入多行字符串,而不会出现任何特定的引用或转义问题。

data:
  deploytimeconfig.json:
{{ .Values.deploytimeconfig | indent 4 }}

请注意,

.Values... | indent
行从第一列开始。
indent
值比前一行多一个缩进步骤。 (你的问题使用 4 个空格缩进,所以你会
indent 8
。)

还有一些关于如何提供文件的问题。如果您的 CI 系统可以创建该文件并将其放入图表源树中,那么您可以使用 Helm

.Files
对象 来检索它。例如,如果文件刚刚放入图表根目录中,

data:
  deploytimeconfig.json:
{{ .Files.Get "deploytimeconfig.json" | indent 4 }}

您还可以让部署系统以 JSON 或 YAML 语法写出 Helm 值文件,并将此内容作为单引号或转义字符串。在这种情况下,您可以将

.Values
语法与
helm install -f
选项结合使用来提供附加值文件。如果文件是动态构建的,这可能是一种更可靠的注入方式。

© www.soinside.com 2019 - 2024. All rights reserved.