From f0a710b18dcf94c92a3058d75035d80112bfacbe Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 25 Sep 2026 08:40:02 +1000 Subject: [PATCH] schema(#293): get_signal_contact sense_ps_state per-PSU dict {psid: bool} 1.17 anchor: per-PSU dict on ssh/mops/snmp; {} when no rows. - snmp: index [group, inner] (SigConID.PSID) replaces key_field collapse - mops: inner_index_field _enumerate (no PSID column; 1.17 row order) - ssh: Power Supply/Status table (table section 1, key_column 0, column 1, sigcon_sense_ssh) on the existing per-contact show; no extra fanout - schema default false -> {} Related: #293 --- crude_engine/schemas/signal_contact.yaml | 3 ++- crude_engine/wire/diagnostic.yaml | 15 +++++++-------- crude_engine/wire/ssh/diagnostic.yaml | 10 +++++++++- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/crude_engine/schemas/signal_contact.yaml b/crude_engine/schemas/signal_contact.yaml index 3840f6a..7058927 100644 --- a/crude_engine/schemas/signal_contact.yaml +++ b/crude_engine/schemas/signal_contact.yaml @@ -16,7 +16,8 @@ methods: sense_fan_module: false sense_module: false sense_module_removal: false - sense_ps_state: false + # Per-PSU dict {psid: bool} (#293 / 1.17 anchor); no PS rows → {} (not bool/None). + sense_ps_state: {} sense_envm_removal: false sense_envm_not_in_sync: false sense_ring_redundancy: false diff --git a/crude_engine/wire/diagnostic.yaml b/crude_engine/wire/diagnostic.yaml index 681b0c0..163dae4 100644 --- a/crude_engine/wire/diagnostic.yaml +++ b/crude_engine/wire/diagnostic.yaml @@ -3647,22 +3647,21 @@ attributes: sources: snmp: read: - # INDEX {hm2SigConID, hm2PSID}; key by contact for get_signal_contact (#235) + # INDEX {hm2SigConID, hm2PSID} → per-PSU dict {psid: bool} per contact + # (#293 Rank1; 1.17 anchor + archive signal_contact.yaml ps_state). + # group=SigConID (row key), inner=PSID. Was key_field collapse → scalar (#235). oid: 1.3.6.1.4.1.248.11.22.1.3.1.2.1.1 method: walk - index_fields: - - {name: hm2SigConID, type: integer} - - {name: hm2PSID, type: integer} - key_field: hm2SigConID + index: [group, inner] mops: read: mib: HM2-DIAGNOSTIC-MIB table: hm2SigConPSEntry field: hm2SigConSensePSState index_field: hm2SigConID - index_fields: - - hm2SigConID - - hm2PSID + # MOPS rows carry no hm2PSID column → PSID from per-contact row order + # (1.17 mops_hios + archive inner_index_field: _enumerate). #293 Rank1. + inner_index_field: _enumerate validation: allowed: - true diff --git a/crude_engine/wire/ssh/diagnostic.yaml b/crude_engine/wire/ssh/diagnostic.yaml index f46c2c6..017efe5 100644 --- a/crude_engine/wire/ssh/diagnostic.yaml +++ b/crude_engine/wire/ssh/diagnostic.yaml @@ -194,7 +194,7 @@ attributes: # Prefer archive signal_contact.yaml + napalm-hios 1.17 (ssh_hios get_signal_contact). # Dedup: one CLI exec per contact across fields. No invent floors. # Left undeclared (no simple 1.17 dot-key / table≠schema-bool): sense_fan_module, - # sense_module, sense_ps_state (PS table), sense_if_link_alarm (Intf table). + # sense_module, sense_if_link_alarm (Intf table). hm2sigconid: sources: ssh: @@ -245,6 +245,14 @@ attributes: ssh: read: {command: "show signal-contact {entity} all", iterate_from: [1, 2], field: "ACA not in sync", tag: value_map, map: sigcon_sense_ssh} + # sense_ps_state (#293 Rank1): per-PSU dict {psid: bool} — Power Supply/Status table + # (1.17 ssh_hios PS rows; archive ps_state: table section 1, key_column 0, column 1). + # Same per-contact show (iterate cache) — no extra fanout. No table → {} (honest). + hm2sigconsensepsstate: + sources: + ssh: + read: {command: "show signal-contact {entity} all", iterate_from: [1, 2], parser: table, section: 1, key_column: 0, column: 1, tag: value_map, map: sigcon_sense_ssh} + hm2sigconsenseringredundancy: sources: ssh: