使用 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 包含地图中点的键。
如何使用 jsonpath 检索 configmap 值?
我正在尝试从我的 configmap 中检索 haproxy.cfg 的值,但我无法正确获取它:
kubectl get cm -l app=haproxy -o jsonpath="{['items'][0]['data']['haproxy.cfg']}"
以上returns没有结果。但是如果我离开 haproxy.cfg:
我绝对可以获得 configmapkubectl 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 包含地图中点的键。