@@ -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 )
0 commit comments