Helm3-将json文件读入configmap会产生一个字符串?

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

问题:

我想将json文件读到configmap中,因此它看起来像:

apiVersion: v1
kind: ConfigMap
metadata:
  name: json-test
data:
  test.json: |-
    {
      "key": "val"
    }

代替我得到

apiVersion: v1
kind: ConfigMap
metadata:
  name: json-test
data:
  test.json: |-
      "{\r\n    \"key\": \"val\"\r\n}"

我做了什么:

我有以下头盔图:

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2020-02-06  10:51 AM                static
d-----        2020-02-06  10:55 AM                templates
-a----        2020-02-06  10:51 AM             88 Chart.yaml

静态/包含一个文件:test.json

{
    "key": "val"
}

templates /包含一个读取test.json的配置映射:test.yml

apiVersion: v1
kind: ConfigMap
metadata:
  name: json-test
data:
  test.json: |-
  {{ toJson ( .Files.Get "static/test.json" ) | indent 4}}

当我运行helm install test . --dry-run --debug时,得到以下输出

NAME: test
LAST DEPLOYED: Thu Feb  6 10:58:18 2020
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
USER-SUPPLIED VALUES:
{}

COMPUTED VALUES:
{}

HOOKS:
MANIFEST:
---
# Source: sandbox/templates/test.yml
apiVersion: v1
kind: ConfigMap
metadata:
  name: json-test
data:
  test.json: |-
      "{\r\n    \"key\": \"val\"\r\n}"

这里的问题是我的json用双引号引起来。我想读取json的进程期望使用实际的json,而不是字符串。

json kubernetes kubernetes-helm sprig-template-functions
1个回答
0
投票

我看到这不是仅对helm 3的特定行为。通常,它以这种方式在kubernetes中工作。

我刚刚在kubernetes v1.13上进行了测试。

首先,我基于此文件创建了一个ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: json-test
data:
  test.json: |-
    {   
      "key": "val"
    }

我跑步时:

$ kubectl get configmaps json-test -o yaml

我得到了预期的输出:

apiVersion: v1
data:
  test.json: |-
    {
      "key": "val"
    }
kind: ConfigMap
metadata:
...

但是当我基于具有以下内容的json文件创建ConfigMap时:

{   
      "key": "val"
} 

通过运行:

$ kubectl create configmap json-configmap --from-file=test-json.json

然后我跑步时:

kubectl get cm json-configmap --output yaml

我得到:

apiVersion: v1
data:
  test-json.json: "    {   \n      \"key\": \"val\"\n    } \n"
kind: ConfigMap
metadata:
...

因此,从文件创建ConfigMap时,kubernetes将原始json格式转换为string看起来很正常。

[这似乎不是错误,因为kubectl从这样的ConfigMap中提取格式正确的json格式没有任何问题:

kubectl get cm json-configmap -o jsonpath='{.data.test-json\.json}'

提供正确的输出:

{   
  "key": "val"
}

我会说能够从这样的string中提取json是应用程序的责任,并且可能可以通过许多不同的方式来完成,例如直接呼叫kube-api或使用配置为使用serviceaccount中的kubectlPod

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