使用 JSONPATH 获取 configmap 值

Use JSONPATH to get configmap value

如何使用 jsonpath 检索 configmap 值?

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

kubectl get cm -l app=haproxy -o jsonpath="{['items'][0]['data']['haproxy.cfg']}"

以上returns没有结果。但是如果我离开 haproxy.cfg:

我绝对可以获得 configmap
kubectl get cm -l app=haproxy -o jsonpath="{['items'][0]['data']}"

产量:

map[haproxy.cfg:
global
  user root
  group root
  maxconn 256
...
]

我可以使用 jq:

kubectl get cm -l app=haproxy -o json | jq -r '.items[0].data["haproxy.cfg"]'

这正是我想要的:


global
  user root
  group root
  maxconn 256

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

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

转义单引号内的.

kubectl get cm -l app=haproxy -o jsonpath="{.items[0].data['haproxy\.cfg']}"

* 这在很久以前,1.5 之前是行不通的。然后你需要使用 go-template 格式。

I have created 简单配置图。

kubectl get cm game-config-example -o json

returns:

{
    "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 版本上测试了转义 . 字符的解决方案。两者都很好。

kubectl get cm game-config-example -o jsonpath="{['data']['ui\.properties']}"

给出正确的输出:

color.good=purple
color.bad=yellow
allow.textmode=true
how.nice.to.look=fairlyNice

如果我使用:

,我可以获得相同的结果
  • go-template:
kubectl get cm game-config-example -o 'go-template={{index .data "ui.properties" }}'
  • jq 命令:
kubectl get cm game-config-example -o json | jq -r '.data."ui.properties"'

您还可以看到 this issue - JSONpath 无法 return 包含地图中点的键。