Skip to content

Commit 0020c11

Browse files
authored
feat: Allow checking kernel versions only in host os analyzer (#1585)
* Allow checking kernel versions only in host os analyzer Signed-off-by: Evans Mungai <[email protected]> * Minor fix in logic Signed-off-by: Evans Mungai <[email protected]> * Fix formatting Signed-off-by: Evans Mungai <[email protected]> --------- Signed-off-by: Evans Mungai <[email protected]>
1 parent 1788376 commit 0020c11

File tree

2 files changed

+51
-4
lines changed

2 files changed

+51
-4
lines changed

pkg/analyze/host_os_info.go

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -86,19 +86,36 @@ func analyzeOSVersionResult(osInfo collect.HostOSInfo, outcomes []*troubleshootv
8686
}
8787

8888
parts := strings.Split(when, " ")
89-
platform := parts[0]
89+
if len(parts) < 3 {
90+
return []*AnalyzeResult{&result}, errors.New("when condition must have at least 3 parts")
91+
}
9092
expectedVer := fixVersion(parts[2])
9193
toleratedVer, err := semver.ParseTolerant(expectedVer)
9294
if err != nil {
93-
return []*AnalyzeResult{&result}, errors.Wrapf(err, "failed to parse tolerant: %s", expectedVer)
95+
return []*AnalyzeResult{&result}, errors.Wrapf(err, "failed to parse version: %s", expectedVer)
9496
}
95-
9697
when = fmt.Sprintf("%s %v", parts[1], toleratedVer)
9798
whenRange, err := semver.ParseRange(when)
9899
if err != nil {
99-
return []*AnalyzeResult{&result}, errors.Wrapf(err, "failed to parse range: %s", when)
100+
return []*AnalyzeResult{&result}, errors.Wrapf(err, "failed to parse version range: %s", when)
101+
}
102+
103+
// Match the kernel version regardless of the platform
104+
// e.g "kernelVersion == 4.15"
105+
if parts[0] == "kernelVersion" {
106+
fixedKernelVer := fixVersion(osInfo.KernelVersion)
107+
toleratedKernelVer, err := semver.ParseTolerant(fixedKernelVer)
108+
if err != nil {
109+
return []*AnalyzeResult{}, errors.Wrapf(err, "failed to parse tolerant: %v", fixedKernelVer)
110+
}
111+
if whenRange(toleratedKernelVer) {
112+
return []*AnalyzeResult{&result}, nil
113+
}
100114
}
101115

116+
// Match the platform version and and kernel version passed in as
117+
// "<platform>-<kernelVersion>-kernel" e.g "centos-8.2-kernel == 8.2"
118+
platform := parts[0]
102119
kernelInfo := fmt.Sprintf("%s-%s-kernel", osInfo.Platform, osInfo.PlatformVersion)
103120
if len(strings.Split(platform, "-")) == 3 && strings.Split(platform, "-")[2] == "kernel" {
104121
if platform == kernelInfo {
@@ -111,6 +128,8 @@ func analyzeOSVersionResult(osInfo collect.HostOSInfo, outcomes []*troubleshootv
111128
return []*AnalyzeResult{&result}, nil
112129
}
113130
}
131+
// Match the platform version
132+
// e.g "centos == 8.2"
114133
} else if platform == osInfo.Platform {
115134
fixedDistVer := fixVersion(osInfo.PlatformVersion)
116135
toleratedDistVer, err := semver.ParseTolerant(fixedDistVer)

pkg/analyze/host_os_info_test.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,34 @@ func TestAnalyzeHostOS(t *testing.T) {
319319
},
320320
},
321321
},
322+
323+
{
324+
name: "test kernelVersion >= 6.4.9-abc",
325+
hostInfo: collect.HostOSInfo{
326+
Name: "my-host",
327+
KernelVersion: "6.5.0-1024-gcp",
328+
PlatformVersion: "22.04",
329+
Platform: "ubuntu",
330+
},
331+
hostAnalyzer: &troubleshootv1beta2.HostOSAnalyze{
332+
Outcomes: []*troubleshootv1beta2.Outcome{
333+
{
334+
Pass: &troubleshootv1beta2.SingleOutcome{
335+
When: "kernelVersion >= 6.4.9-abc",
336+
Message: "supported kernel version >= 6.4.9-abc",
337+
},
338+
},
339+
},
340+
},
341+
342+
result: []*AnalyzeResult{
343+
{
344+
Title: "Host OS Info",
345+
IsPass: true,
346+
Message: "supported kernel version >= 6.4.9-abc",
347+
},
348+
},
349+
},
322350
}
323351
for _, test := range tests {
324352
t.Run(test.name, func(t *testing.T) {

0 commit comments

Comments
 (0)