是否可以基于多个子列表值的组合获得列表元素



我有一个数据结构(由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(用于选择";字段";从每个";记录";在一张桌子上。

相关内容

  • 没有找到相关文章

最新更新