Improve Multillect Redfish replay and power detection

This commit is contained in:
Mikhail Chusavitin
2026-03-26 18:41:02 +03:00
parent 8acbba3cc9
commit 99f0d6217c
4 changed files with 884 additions and 10 deletions

View File

@@ -110,7 +110,7 @@ func (c *RedfishConnector) Probe(ctx context.Context, req Request) (*ProbeResult
if err != nil {
return nil, fmt.Errorf("redfish system: %w", err)
}
powerState := strings.TrimSpace(asString(systemDoc["PowerState"]))
powerState := redfishSystemPowerState(systemDoc)
return &ProbeResult{
Reachable: true,
Protocol: "redfish",
@@ -494,7 +494,7 @@ func (c *RedfishConnector) ensureHostPowerForCollection(ctx context.Context, cli
return false, false
}
powerState := strings.TrimSpace(asString(systemDoc["PowerState"]))
powerState := redfishSystemPowerState(systemDoc)
if isRedfishHostPoweredOn(powerState) {
if emit != nil {
emit(Progress{Status: "running", Progress: 18, Message: fmt.Sprintf("Redfish: host включен (%s)", firstNonEmpty(powerState, "On"))})
@@ -753,7 +753,7 @@ func (c *RedfishConnector) waitForHostPowerState(ctx context.Context, client *ht
for {
systemDoc, err := c.getJSON(ctx, client, req, baseURL, systemPath)
if err == nil {
if isRedfishHostPoweredOn(strings.TrimSpace(asString(systemDoc["PowerState"]))) == wantOn {
if isRedfishHostPoweredOn(redfishSystemPowerState(systemDoc)) == wantOn {
return true
}
}
@@ -786,6 +786,19 @@ func isRedfishHostPoweredOn(state string) bool {
}
}
func redfishSystemPowerState(systemDoc map[string]interface{}) string {
if len(systemDoc) == 0 {
return ""
}
if state := strings.TrimSpace(asString(systemDoc["PowerState"])); state != "" {
return state
}
if summary, ok := systemDoc["PowerSummary"].(map[string]interface{}); ok {
return strings.TrimSpace(asString(summary["PowerState"]))
}
return ""
}
func redfishResetActionTarget(systemDoc map[string]interface{}) string {
if systemDoc == nil {
return ""