我在使用 JQ 时遇到问题,无法获取正确的字段。我没有那么多教程,但似乎无法理解。我试图只获取“mysql”容器的“cpu”,但我不断获取“sidecar 和 mysql”。老实说,我认为这是我对JQ的误解,所以请随时指出我的误解。
我不断收到以下信息,但应该只看到“2100m”:
null
2100m
jq -r --arg _NAME "mysql-innodb-cluster-0" #只获取该特定名称的容器
'.items[] #处理所有项目
| select(.metadata.name == $_NAME ) #在具有此名称的容器上工作
| .spec.containers #获取特定的key,这里将是一个对象。
select(.[].name=="sidecar" | not ) #现在你有了容器数组,只使用不名为“sidecar”的那个
| .[].resources.limits.cpu ' #您现在 MySQL 容器仅获取它的“cpu”值。
我使用的命令:
jq -r --arg _NAME "mysql-innodb-cluster-0" '.items[] | select(.metadata.name == $_NAME ) | .spec.containers | select(.[].name=="sidecar" | not ) | .[].resources.limits.cpu ' --raw-output /tmp/test.json
测试.json
{
"apiVersion": "v1",
"items": [
{
"apiVersion": "v1",
"kind": "Pod",
"metadata": {
"name": "mysql-innodb-cluster-0"
},
"spec": {
"containers": [
{
"name": "sidecar",
"resources": {}
},
{
"name": "mysql",
"resources": {
"limits": {
"cpu": "2100m",
"memory": "5G"
}
}
}
]
}
}
],
"kind": "List"
}
在
selected
输入正确的名称后,您需要继续select
在.spec.containers
上找到带有name === "mysql"
的名称,然后从该对象中选择.resources.limits.cpu
:
.items[] | select(.metadata.name == $_NAME) | (.spec.containers[] | select(.name == "mysql").resources?.limits?.cpu)
将输出:
"2100m"