Skip to content

Commit 9b5ce96

Browse files
committed
✨ Enhance EulerOS version detection
Implements: #6314 Use title from /etc/euleros-release instead of /etc/os-release. Signed-off-by: Christian Zunker <christian@mondoo.com>
1 parent f06dc4d commit 9b5ce96

File tree

4 files changed

+62
-1
lines changed

4 files changed

+62
-1
lines changed

providers/os/detector/detector_all.go

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -468,7 +468,7 @@ var oracle = &PlatformResolver{
468468
return true, nil
469469
}
470470

471-
// check if we have /etc/centos-release file
471+
// check if we have /etc/oracle-release file
472472
f, err := conn.FileSystem().Open("/etc/oracle-release")
473473
if err != nil {
474474
return false, nil
@@ -838,6 +838,26 @@ var euleros = &PlatformResolver{
838838
Name: "euleros",
839839
IsFamily: false,
840840
Detect: func(r *PlatformResolver, pf *inventory.Platform, conn shared.Connection) (bool, error) {
841+
// EulerOS includes /etc/os-release file, but version information in this file is not reliable
842+
// So, we need to check whether /etc/euleros-release file exists
843+
f, err := conn.FileSystem().Open("/etc/euleros-release")
844+
if err != nil {
845+
return false, nil
846+
}
847+
defer f.Close()
848+
849+
content, err := io.ReadAll(f)
850+
if err != nil {
851+
return false, err
852+
}
853+
prettyName := strings.Trim(string(content), "\n")
854+
if len(prettyName) > 0 {
855+
// align with title from /etc/os-release
856+
// EulerOS release 2.0 (SP9x86_64) => EulerOS 2.0 (SP9x86_64)
857+
prettyName = strings.Replace(prettyName, " release", "", 1)
858+
pf.Title = prettyName
859+
}
860+
841861
if pf.Name == "euleros" {
842862
return true, nil
843863
}

providers/os/detector/detector_platform_test.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1061,6 +1061,19 @@ func TestEulerOSDetector(t *testing.T) {
10611061

10621062
assert.Equal(t, "euleros", di.Name, "os name should be identified")
10631063
assert.Equal(t, "EulerOS 2.0 (SP9x86_64)", di.Title, "os title should be identified")
1064+
assert.Equal(t, "2.0", di.Version, "os version should be identified")
1065+
assert.Equal(t, "x86_64", di.Arch, "os arch should be identified")
1066+
assert.Equal(t, []string{"euler", "linux", "unix", "os"}, di.Family)
1067+
}
1068+
1069+
// Verify /etc/euleros-release overrides the title from /etc/os-release
1070+
func TestEulerOSDetector_withdifferentversion(t *testing.T) {
1071+
di, err := detectPlatformFromMock("./testdata/detect-euleros-2_v2.toml")
1072+
assert.Nil(t, err, "was able to create the provider")
1073+
1074+
assert.Equal(t, "euleros", di.Name, "os name should be identified")
1075+
assert.Equal(t, "EulerOS 2.0 (SP9x86_64)", di.Title, "os title should be identified")
1076+
assert.Equal(t, "2.0", di.Version, "os version should be identified")
10641077
assert.Equal(t, "x86_64", di.Arch, "os arch should be identified")
10651078
assert.Equal(t, []string{"euler", "linux", "unix", "os"}, di.Family)
10661079
}

providers/os/detector/testdata/detect-euleros-2.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,8 @@ VERSION_ID="2.0"
1616
PRETTY_NAME="EulerOS 2.0 (SP9x86_64)"
1717
ANSI_COLOR="0;31"
1818
"""
19+
20+
[files."/etc/euleros-release"]
21+
content = """
22+
EulerOS release 2.0 (SP9x86_64)
23+
"""
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
[commands."uname -s"]
2+
stdout = "Linux"
3+
4+
[commands."uname -m"]
5+
stdout = "x86_64"
6+
7+
[commands."uname -r"]
8+
stdout = "4.18.0-147.5.1.6.h1511.eulerosv2r9.x86_64"
9+
10+
[files."/etc/os-release"]
11+
content = """
12+
NAME="EulerOS"
13+
VERSION="2.0 (SP5x86_64)"
14+
ID="euleros"
15+
VERSION_ID="2.0"
16+
PRETTY_NAME="EulerOS 2.0 (SP5x86_64)"
17+
ANSI_COLOR="0;31"
18+
"""
19+
20+
[files."/etc/euleros-release"]
21+
content = """
22+
EulerOS release 2.0 (SP9x86_64)
23+
"""

0 commit comments

Comments
 (0)