Как получить указанные значения из фактов

Я немного запутался. Я уже попробовал 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, sdgdm-0) объект. Если partitions.sdf1 существует, condition будет содержать этот объект, то есть:

"condition": {
  "holders": [],
  "links": {
    "ids": [
      "17101686F123-part1",
      "wwn-0x123456-part1"
    ]
  },
  "sectors": "1875380224"
}

С помощью [?condition] вы отфильтровываете все объекты, где condition является null, Наконец, мы извлекаем фактическое значение, используя .value

Другие вопросы по тегам