Как получить указанные значения из фактов
Я немного запутался. Я уже попробовал jmespath, но не помог. Мне нужно получить объект высокого уровня, который содержит указанный объект. В приведенном ниже примере мы видим очевидный факт о жестких дисках. Мне нужно получить имя диска (sdf
, sdg
или же dm-0
) жесткого диска, который содержит указанный раздел, например sdf1
,
У меня есть этот запрос jmespath:
msg.*.[partitions.sdf1]
но это просто показывает мне все внутри sdf1
, Фильтры как [?partitions=="sdf1"]
не работать здесь, поэтому вопрос: как сохранить все sdf
объект в моем примере?
заранее спасибо!
{
"msg": {
"sdf": {
"partitions": {
"sdf1": {
"holders": [],
"links": {
"ids": [
"17101686F123-part1",
"wwn-0x123456-part1"
]
},
"sectors": "1875380224"
}
},
"removable": "0",
"rotational": "0"
},
"sdg": {
"partitions": {
"sdg1": {
"holders": [],
"links": {
"ids": [
"164414123CEB-part1",
"wwn-0x1233451234831ceb-part1"
]
},
"uuid": "F301-FA7F"
}
},
"removable": "0"
},
"dm-0": {
"holders": [],
"host": "",
"links": {
"ids": [],
"uuids": []
},
"vendor": null,
"virtual": 1
}
}
}
1 ответ
Это должно работать:
msg.*.{value: @, condition: partitions.sdf1}[?condition].value
объяснение
Сначала мы создаем временный объект для каждого объекта HDD: {value, condition}
, condition
будет null
если partitions.sdf1
не существует на соответствующем жестком диске (sdf
, sdg
dm-0
) объект. Если partitions.sdf1
существует, condition
будет содержать этот объект, то есть:
"condition": {
"holders": [],
"links": {
"ids": [
"17101686F123-part1",
"wwn-0x123456-part1"
]
},
"sectors": "1875380224"
}
С помощью [?condition]
вы отфильтровываете все объекты, где condition
является null
, Наконец, мы извлекаем фактическое значение, используя .value