feat(exporter): collect and export storage.vendor_id/device_id (contract v2.13)
Add PCI Vendor ID / Device ID to hardware.storage[] per the updated Reanimator ingest contract, mirroring the existing pcie_devices[] fields. Populated for Redfish-collected NVMe drives (live + TSR replay, via linked PCIeFunctions) and for Inspur (from asset.json's own PcieInfo[], joined by PcieSlot). Also fixes canonicalDevicesForExport dropping the fields when converting Storage into the canonical HardwareDevice list used by the actual export path. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
063587958e
commit
399eca5f49
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: Hardware Ingest JSON Contract
|
||||
version: "2.12"
|
||||
version: "2.13"
|
||||
updated: "2026-08-11"
|
||||
maintainer: Reanimator Core
|
||||
audience: external-integrators, ai-agents
|
||||
@@ -9,7 +9,7 @@ language: ru
|
||||
|
||||
# Интеграция с Reanimator: контракт JSON-импорта аппаратного обеспечения
|
||||
|
||||
Версия: **2.12** · Дата: **2026-08-11**
|
||||
Версия: **2.13** · Дата: **2026-08-11**
|
||||
|
||||
Документ описывает формат JSON для передачи данных об аппаратном обеспечении серверов в систему **Reanimator** (управление жизненным циклом аппаратного обеспечения).
|
||||
Предназначен для разработчиков смежных систем (Redfish-коллекторов, агентов мониторинга, CMDB-экспортёров) и может быть включён в документацию интегрируемых проектов.
|
||||
@@ -22,6 +22,7 @@ language: ru
|
||||
|
||||
| Версия | Дата | Изменения |
|
||||
|--------|------|-----------|
|
||||
| 2.13 | 2026-08-11 | Для `hardware.storage[]` добавлены необязательные поля `vendor_id`/`device_id` (PCI Vendor ID / Device ID, decimal) — по образцу `pcie_devices`; передавайте их для NVMe-накопителей, если аудит-софт их знает. `vendor_id`/`device_id` (у `storage` и `pcie_devices`) теперь явно приоритетны при разрешении канонического вендора/модели устройства (объединение разных текстовых названий одного и того же устройства в одну запись реестра) и участвуют в генерации `vendor_serial`, если у `storage` нет `serial_number`, но известен `slot` |
|
||||
| 2.12 | 2026-08-11 | Добавлена необязательная секция `hardware.licenses[]` для лицензий на ПО/прошивку и связанного софтверного функционала (feature-on-demand, vGPU/iDRAC/iLO-style advanced-лицензии и т.п.). Лицензия может быть системной (без `component_ref`) либо привязанной к конкретному компоненту (`component_ref`). Секция использует те же общие поля статуса/истории, что и остальные компонентные секции |
|
||||
| 2.11 | 2026-06-19 | В `pcie_devices[]` добавлен необязательный массив `sfp_modules[]` с идентификацией и DOM telemetry SFP/QSFP-модулей. Скалярные поля `sfp_temperature_c` / `sfp_tx_power_dbm` / `sfp_rx_power_dbm` / `sfp_voltage_v` / `sfp_bias_ma` помечены как deprecated (принимаются, но `sfp_modules[]` имеет приоритет) |
|
||||
| 2.10 | 2026-04-29 | Для `hardware.storage[]` добавлены необязательные числовые поля `logical_block_size_bytes`, `physical_block_size_bytes`, `metadata_bytes_per_block` для нормализованного описания формата блока накопителя |
|
||||
@@ -369,6 +370,8 @@ GET /ingest/hardware/jobs/{job_id}
|
||||
|------|-----|-------------|----------|
|
||||
| `slot` | string | нет | Канонический адрес установки PCIe-устройства; передавайте BDF (`0000:18:00.0`) |
|
||||
| `serial_number` | string | нет | Серийный номер |
|
||||
| `vendor_id` | int | нет | PCI Vendor ID (decimal) — для NVMe-накопителей, если известен |
|
||||
| `device_id` | int | нет | PCI Device ID (decimal) — для NVMe-накопителей, если известен |
|
||||
| `model` | string | нет | Модель |
|
||||
| `manufacturer` | string | нет | Производитель |
|
||||
| `type` | string | нет | Тип: `NVMe`, `SSD`, `HDD` |
|
||||
@@ -395,7 +398,9 @@ GET /ingest/hardware/jobs/{job_id}
|
||||
| `present` | bool | нет | Наличие (по умолчанию `true`) |
|
||||
| + общие поля статуса | | | см. раздел выше |
|
||||
|
||||
Диск без `serial_number` игнорируется. Изменение `firmware` создаёт событие `FIRMWARE_CHANGED`.
|
||||
Диск без `serial_number` и без `slot` игнорируется. Если `serial_number` отсутствует, но известен `slot` (BDF NVMe-устройства), `vendor_serial` генерируется по тому же принципу, что и для `pcie_devices` (см. «Обработка отсутствующих serial_number» ниже). Изменение `firmware` создаёт событие `FIRMWARE_CHANGED`.
|
||||
|
||||
`vendor_id`/`device_id` используются в первую очередь при разрешении канонического вендора/модели устройства (объединяют разные текстовые названия одного и того же устройства, которые могли передать разные версии/источники сборщика, в одну запись реестра) — так же, как и для `pcie_devices`. Это не замена `serial_number` как идентификатора конкретного физического экземпляра: `vendor_id`/`device_id` одинаковы для всех накопителей одной модели.
|
||||
|
||||
Формат вида `512+8` в контракт не добавляется отдельным строковым полем. Если источник знает такую форму, он должен передавать её как:
|
||||
- `logical_block_size_bytes = 512`
|
||||
@@ -407,6 +412,8 @@ GET /ingest/hardware/jobs/{job_id}
|
||||
{
|
||||
"slot": "OB01",
|
||||
"type": "NVMe",
|
||||
"vendor_id": 32902,
|
||||
"device_id": 62305,
|
||||
"model": "INTEL SSDPF2KX076T1",
|
||||
"size_gb": 7680,
|
||||
"logical_block_size_bytes": 512,
|
||||
@@ -472,6 +479,8 @@ GET /ingest/hardware/jobs/{job_id}
|
||||
`numa_node` передавайте для NIC / InfiniBand / RAID / GPU, когда источник знает CPU/NUMA affinity. Поле сохраняется в snapshot-атрибутах PCIe-компонента и дублируется в telemetry для topology use cases.
|
||||
Поля `temperature_c` и `power_w` используйте для device-level telemetry GPU / accelerator / smart PCIe devices. Они не влияют на идентификацию компонента.
|
||||
|
||||
`vendor_id`/`device_id` используются в первую очередь при разрешении канонического вендора/модели устройства (см. аналогичное примечание в разделе `storage`).
|
||||
|
||||
**Deprecated поля sfp_\*:** Скалярные поля `sfp_temperature_c`, `sfp_tx_power_dbm`, `sfp_rx_power_dbm`, `sfp_voltage_v`, `sfp_bias_ma` продолжают приниматься, но помечены как deprecated since 2.11. Если в payload одновременно присутствуют `sfp_modules[]` и deprecated sfp_-скаляры — приоритет у `sfp_modules[]`, скаляры игнорируются. Deprecated поля будут удалены в версии 3.0.
|
||||
|
||||
**Генерация serial_number при отсутствии или `"N/A"`:** `{board_serial}-PCIE-{slot}`, где `slot` для PCIe равен BDF.
|
||||
@@ -892,8 +901,8 @@ PSU без `serial_number` игнорируется.
|
||||
|-----|-----------|
|
||||
| CPU | Генерируется: `{board_serial}-CPU-{socket}` |
|
||||
| PCIe | Генерируется: `{board_serial}-PCIE-{slot}` (если serial = `"N/A"` или пустой; `slot` для PCIe = BDF) |
|
||||
| Storage | Если известен `slot` (BDF NVMe): генерируется `{board_serial}-STORAGE-{slot}`. Если `slot` не известен — компонент игнорируется |
|
||||
| Memory | Компонент игнорируется |
|
||||
| Storage | Компонент игнорируется |
|
||||
| PSU | Компонент игнорируется |
|
||||
|
||||
Если `serial_number` не уникален внутри одного payload для того же `model`:
|
||||
|
||||
Reference in New Issue
Block a user