首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JSONPATH获取configmap值

使用JSONPATH获取configmap值
EN

Stack Overflow用户
提问于 2021-06-15 22:53:36
回答 2查看 835关注 0票数 1

如何使用jsonpath检索configmap值?

我正在尝试从configmap中检索haproxy.cfg的值,但我无法正确地获得它:

代码语言:javascript
复制
kubectl get cm -l app=haproxy -o jsonpath="{['items'][0]['data']['haproxy.cfg']}"

上述结果不返回结果。但是,如果不使用haproxy.cfg,我肯定可以得到configmap:

代码语言:javascript
复制
kubectl get cm -l app=haproxy -o jsonpath="{['items'][0]['data']}"

产量:

代码语言:javascript
复制
map[haproxy.cfg:
global
  user root
  group root
  maxconn 256
...
]

我可以用jq:

代码语言:javascript
复制
kubectl get cm -l app=haproxy -o json | jq -r '.items[0].data["haproxy.cfg"]'

这正是我想要的结果:

代码语言:javascript
复制
global
  user root
  group root
  maxconn 256

如果您需要帮助创建您的ConfigMap,下面是我正在使用的清单:

代码语言:javascript
复制
apiVersion: v1
data:
    haproxy.cfg: "\nglobal\n  user root\n  group root\n  maxconn 256\n\n"
kind: ConfigMap
metadata:
    annotations:
      meta.helm.sh/release-name: haproxy
      meta.helm.sh/release-namespace: haproxy
    labels:
      app: haproxy
      app-version: 2.4.0
      app.kubernetes.io/managed-by: Helm
      heritage: Helm
      release: haproxy
      version: 0.0.3
    name: haproxy
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-16 02:11:52

转义单引号中的.

代码语言:javascript
复制
kubectl get cm -l app=haproxy -o jsonpath="{.items[0].data['haproxy\.cfg']}"

*这在很久以前,即1.5岁以前就不起作用了。然后,您需要使用go-template格式。

票数 2
EN

Stack Overflow用户

发布于 2021-06-16 11:28:04

我创造了简单结构映射。

代码语言:javascript
复制
kubectl get cm game-config-example -o json

返回:

代码语言:javascript
复制
{
    "apiVersion": "v1",
    "data": {
        "game.properties": "enemies=aliens\nlives=3\nenemies.cheat=true\nenemies.cheat.level=noGoodRotten\nsecret.code.passphrase=UUDDLRLRBABAS\nsecret.code.allowed=true\nsecret.code.lives=30",
        "ui.properties": "color.good=purple\ncolor.bad=yellow\nallow.textmode=true\nhow.nice.to.look=fairlyNice\n"
    },
    "kind": "ConfigMap",
    "metadata": {
        "creationTimestamp": "2021-06-16T10:08:28Z",
        "name": "game-config-example",
        "namespace": "default",
        "resourceVersion": "24666141",
        "selfLink": "/api/v1/namespaces/default/configmaps/game-config-example",
        "uid": "3d6d2ba0-8f5a-43a7-953b-91a62dbcd248"
    }
}

我已经测试了在1.19和1.21版本上转义.字符的解决方案。两种方法都很好。

代码语言:javascript
复制
kubectl get cm game-config-example -o jsonpath="{['data']['ui\.properties']}"

提供正确的输出:

代码语言:javascript
复制
color.good=purple
color.bad=yellow
allow.textmode=true
how.nice.to.look=fairlyNice

如果我使用:

  • go-template
代码语言:javascript
复制
kubectl get cm game-config-example -o 'go-template={{index .data "ui.properties" }}'
  • jq命令:
代码语言:javascript
复制
kubectl get cm game-config-example -o json | jq -r '.data."ui.properties"'

您还可以看到,本期 - JSONpath无法返回地图中包含点的键。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67994374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档