fix(inspur): match main board FRU on word boundary

A bare "board" substring test let compound module names like
"FANBOARD0_FRU" qualify as the main system board, overwriting the
real board info with fan-board serial/part numbers. Switch to a
word-boundary regex.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-10 11:58:33 +03:00
co-authored by Claude Sonnet 5
parent 95f552a0e5
commit 71f4c237fc
2 changed files with 34 additions and 5 deletions
+4 -5
View File
@@ -12,6 +12,9 @@ var (
fruDeviceRegex = regexp.MustCompile(`^FRU Device Description\s*:\s*(.+)$`)
fruFieldRegex = regexp.MustCompile(`^\s+(.+?)\s*:\s*(.*)$`)
platformIdRegex = regexp.MustCompile(`(?i)PlatformId\s*=\s*(\S+)`)
// Word-boundary match so compound module names like "FANBOARD0_FRU" don't
// falsely qualify as the main system board via a bare "board" substring.
mainBoardDescRegex = regexp.MustCompile(`(?i)\b(builtin|fru device|chassis|board)\b`)
)
// ParseFRU parses BMC FRU (Field Replaceable Unit) output
@@ -120,11 +123,7 @@ func extractBoardInfo(fruList []models.FRUInfo, hw *models.HardwareConfig) {
}
// Prioritize entries that look like main board info
desc := strings.ToLower(fru.Description)
isMainBoard := strings.Contains(desc, "builtin") ||
strings.Contains(desc, "fru device") ||
strings.Contains(desc, "chassis") ||
strings.Contains(desc, "board")
isMainBoard := mainBoardDescRegex.MatchString(fru.Description)
if fru.SerialNumber != "" && hw.BoardInfo.SerialNumber == "" {
hw.BoardInfo.SerialNumber = fru.SerialNumber