我有一个数据结构(由kubectl以以下格式提供(,它与集群中的一些自定义资源定义有关。当列表元素的.status.conditions
列表具有.type == "Ready"
和.status == "False"
的条件时,我想使用jq
或类似的方法返回.items[x].metadata.name
。
"商业案例"是";获取任何尚未准备好的自定义资源">
我觉得数据的结构让这变得很困难,但我想知道是否有可能使用jq
。
非常感谢您的帮助!
{
"apiVersion": "v1",
"items": [
{
"metadata": {
"name": "return-me"
},
"spec": {
"region": "ap-southeast-2"
},
"status": {
"conditions": [
{
"message": "Some Condition A",
"reason": "Supported",
"status": "True",
"type": "IsSupported"
},
{
"message": "Some Condition B",
"reason": "Shared",
"status": "True",
"type": "IsShared"
},
{
"message": "Some Condition C",
"reason": "Accepted",
"status": "False",
"type": "IsAccepted"
},
{
"status": "True",
"type": "OthersReady"
},
{
"status": "False",
"type": "Ready"
}
]
}
},
{
"metadata": {
"name": "dont-return-me"
},
"spec": {
"region": "ap-northeast-1"
},
"status": {
"conditions": [
{
"message": "Some Condition A",
"reason": "Supported",
"status": "True",
"type": "IsSupported"
},
{
"message": "Some Condition B",
"reason": "Shared",
"status": "True",
"type": "IsShared"
},
{
"message": "Some Condition C",
"reason": "Accepted",
"status": "False",
"type": "IsAccepted"
},
{
"status": "True",
"type": "OthersReady"
},
{
"status": "True",
"type": "Ready"
}
]
}
},
],
"kind": "List",
"metadata": {
"resourceVersion": "",
"selfLink": ""
}
}
根据您的输入,过滤器
.items[]
| select( any(.status.conditions[]; .type == "Ready" and .status == "False") )
| .metadata.name
返回
"return-me"
这似乎充满希望:-(
注意
熟悉SQL的select
的人应该注意到,jq的select
从其输入流中选择元素,因此与SQL的select(用于选择";字段";从每个";记录";在一张桌子上。