尝试从 json 中删除第一个和最后一个方括号使用 helm 将数据注入 configmap

trying to remove first and last square brackets from json injecting data into configmap using helm

我在 JSON 文件中有数据,我正在使用 Helm 将每一行作为键值添加到 ConfigMap 中,但我需要删除第一个和最后一个大括号。

下面是JSON文件内容:

{
    "type": "PurposeResourcesDefinition",
    "version": "1.0",
    "purposeId": "p#####",
    "description": "Artifactory container registry",
    "resources": [{
        "type": "artifactory.containerregistry",
        "name": "<repository name prefixed with the purpose>"
    ]
}

我正在使用以下 Helm 语法:

data:
  {{ range .Files.Lines "foo/app.json" }}
  {{ . }}{{ end }}

如何使用 Helm 模板删除周围的大括号?

如果您知道 {} 会单独成行,您可以跳过它们。这不是特别可靠,但它适用于您展示的示例。

data:
{{- range .Files.Lines "foo/app.json" }}
{{- if and (ne . "{") (ne . "}") }}
  {{ . }}
{{- end }}

在更高层次上,您似乎正在尝试读入 JSON 文件,然后将这些值作为 ConfigMap 的内容写出。由于 YAML 和 JSON 之间的语法相似性,去除前导和尾随大括号会起作用,但主动从一种格式转换为另一种格式可能会更好。 Helm 有 several undocumented conversion functions,包括 fromJsontoYaml。所以你也可以这样写:

data: {{- .Files.Get "foo/app.json" | fromJson | toYaml | nindent 2 }}