Skip to content

Commit e5b48e8

Browse files
authored
⭐️ detect Suse OS variant id (#5400)
1 parent 778cce8 commit e5b48e8

4 files changed

Lines changed: 53 additions & 0 deletions

File tree

providers/os/detector/detector_all.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -888,6 +888,9 @@ var linuxFamily = &PlatformResolver{
888888
if pf.Labels == nil {
889889
pf.Labels = map[string]string{}
890890
}
891+
if pf.Metadata == nil {
892+
pf.Metadata = map[string]string{}
893+
}
891894

892895
lsb, err := osrd.lsbconfig()
893896
// ignore lsb config if we got an error
@@ -916,7 +919,9 @@ var linuxFamily = &PlatformResolver{
916919
} else {
917920
if len(osr["ID"]) > 0 {
918921
pf.Name = osr["ID"]
922+
// Deprecated: remove in 12.0
919923
pf.Labels[LabelDistroID] = osr["ID"]
924+
pf.Metadata[LabelDistroID] = osr["ID"]
920925
}
921926
if len(osr["PRETTY_NAME"]) > 0 {
922927
pf.Title = osr["PRETTY_NAME"]
@@ -929,6 +934,12 @@ var linuxFamily = &PlatformResolver{
929934
pf.Build = osr["BUILD_ID"]
930935
}
931936

937+
if len(osr["VARIANT_ID"]) > 0 {
938+
// Deprecated: remove in 12.0
939+
pf.Labels["variant-id"] = osr["VARIANT_ID"]
940+
pf.Metadata["variant-id"] = osr["VARIANT_ID"]
941+
}
942+
932943
detected = true
933944
}
934945

providers/os/detector/detector_platform_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -498,6 +498,21 @@ func TestSuse15Detector(t *testing.T) {
498498
assert.Equal(t, []string{"suse", "linux", "unix", "os"}, di.Family)
499499
}
500500

501+
func TestSuse15SapDetector(t *testing.T) {
502+
di, err := detectPlatformFromMock("./testdata/detect-suse-sles-15-sap.toml")
503+
assert.Nil(t, err, "was able to create the provider")
504+
505+
assert.Equal(t, "sles", di.Name, "os name should be identified")
506+
assert.Equal(t, "SUSE Linux Enterprise Server 15 SP2", di.Title, "os title should be identified")
507+
assert.Equal(t, "15.2", di.Version, "os version should be identified")
508+
assert.Equal(t, "x86_64", di.Arch, "os arch should be identified")
509+
assert.Equal(t, []string{"suse", "linux", "unix", "os"}, di.Family)
510+
assert.Equal(t, map[string]string{
511+
"distro-id": "sles",
512+
"variant-id": "sles-sap",
513+
}, di.Labels)
514+
}
515+
501516
func TestSuse5MicroDetector(t *testing.T) {
502517
di, err := detectPlatformFromMock("./testdata/detect-suse-micro-5.toml")
503518
assert.Nil(t, err, "was able to create the provider")
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
[commands."uname -s"]
2+
stdout = "Linux"
3+
4+
[commands."uname -m"]
5+
stdout = "x86_64"
6+
7+
[commands."uname -r"]
8+
stdout = "5.3.18-24.46-default"
9+
10+
[files."/etc/os-release"]
11+
content = """
12+
NAME="SLES"
13+
VERSION="15-SP2"
14+
VERSION_ID="15.2"
15+
PRETTY_NAME="SUSE Linux Enterprise Server 15 SP2"
16+
ID="sles"
17+
ID_LIKE="suse"
18+
ANSI_COLOR="0;32"
19+
CPE_NAME="cpe:/o:suse:sles:15:sp2"
20+
VARIANT_ID="sles-sap"
21+
"""

providers/os/resources/purl/platform_purl.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@ func NewPlatformPurl(platform *inventory.Platform) (string, error) {
3131
}
3232
qualifiers[QualifierDistro] = strings.Join(distroQualifiers, "-")
3333

34+
// e.g. used on suse linux
35+
variantID, ok := platform.Labels["variant-id"]
36+
if ok && variantID != "" {
37+
qualifiers["variant-id"] = variantID
38+
}
39+
3440
return packageurl.NewPackageURL(
3541
string(Type_X_Platform),
3642
platform.Name,

0 commit comments

Comments
 (0)