74 lines
1.8 KiB
Go
74 lines
1.8 KiB
Go
//
|
|
// Use and distribution licensed under the Apache license version 2.
|
|
//
|
|
// See the COPYING file in the root project directory for full text.
|
|
//
|
|
|
|
package ghw
|
|
|
|
import "fmt"
|
|
|
|
// BaseboardInfo defines baseboard release information
|
|
type BaseboardInfo struct {
|
|
AssetTag string `json:"asset_tag"`
|
|
SerialNumber string `json:"serial_number"`
|
|
Vendor string `json:"vendor"`
|
|
Version string `json:"version"`
|
|
}
|
|
|
|
func (i *BaseboardInfo) String() string {
|
|
|
|
vendorStr := ""
|
|
if i.Vendor != "" {
|
|
vendorStr = " vendor=" + i.Vendor
|
|
}
|
|
serialStr := ""
|
|
if i.SerialNumber != "" && i.SerialNumber != UNKNOWN {
|
|
serialStr = " serial=" + i.SerialNumber
|
|
}
|
|
versionStr := ""
|
|
if i.Version != "" {
|
|
versionStr = " version=" + i.Version
|
|
}
|
|
|
|
res := fmt.Sprintf(
|
|
"baseboard%s%s%s",
|
|
vendorStr,
|
|
serialStr,
|
|
versionStr,
|
|
)
|
|
return res
|
|
}
|
|
|
|
// Baseboard returns a pointer to a BaseboardInfo struct containing information
|
|
// about the host's baseboard
|
|
func Baseboard(opts ...*WithOption) (*BaseboardInfo, error) {
|
|
mergeOpts := mergeOptions(opts...)
|
|
ctx := &context{
|
|
chroot: *mergeOpts.Chroot,
|
|
}
|
|
info := &BaseboardInfo{}
|
|
if err := ctx.baseboardFillInfo(info); err != nil {
|
|
return nil, err
|
|
}
|
|
return info, nil
|
|
}
|
|
|
|
// simple private struct used to encapsulate baseboard information in a top-level
|
|
// "baseboard" YAML/JSON map/object key
|
|
type baseboardPrinter struct {
|
|
Info *BaseboardInfo `json:"baseboard"`
|
|
}
|
|
|
|
// YAMLString returns a string with the baseboard information formatted as YAML
|
|
// under a top-level "dmi:" key
|
|
func (info *BaseboardInfo) YAMLString() string {
|
|
return safeYAML(baseboardPrinter{info})
|
|
}
|
|
|
|
// JSONString returns a string with the baseboard information formatted as JSON
|
|
// under a top-level "baseboard:" key
|
|
func (info *BaseboardInfo) JSONString(indent bool) string {
|
|
return safeJSON(baseboardPrinter{info}, indent)
|
|
}
|