feat(models): resolve CPU serial from source PPIN as common fallback

Centralize CPU identity in models.ResolveCPUSerialNumber: an explicit
source serial wins, otherwise a valid source PPIN is used, placeholders
rejected. Dell, H3C and Redfish apply it while parsing; canonical-device
and Reanimator conversion apply it again at the output boundary. No
identity is synthesized from socket/model/board serial.

See ADL-058.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Mikhail Chusavitin
2026-08-27 17:05:40 +03:00
co-authored by Claude Sonnet 5
parent 9d701885da
commit 07c270cda2
13 changed files with 122 additions and 19 deletions
+23
View File
@@ -0,0 +1,23 @@
package models
import "strings"
// ResolveCPUSerialNumber returns a source-backed processor inventory identity.
// A vendor-provided serial number has priority; PPIN is the documented CPU
// serial identity and is used when a separate serial number is unavailable.
func ResolveCPUSerialNumber(serialNumber, ppin string) string {
if serial := validCPUIdentity(serialNumber); serial != "" {
return serial
}
return validCPUIdentity(ppin)
}
func validCPUIdentity(value string) string {
value = strings.TrimSpace(value)
switch strings.ToLower(value) {
case "", "-", "n/a", "na", "none", "null", "unknown", "not available", "to be filled by o.e.m.":
return ""
default:
return value
}
}