@@ -63,7 +63,7 @@ func (a *AnalyzeHostCPU) Analyze(
6363 return []* AnalyzeResult {& result }, nil
6464 }
6565
66- isMatch , err := compareHostCPUConditionalToActual (outcome .Fail .When , cpuInfo .LogicalCount , cpuInfo .PhysicalCount , cpuInfo .Flags )
66+ isMatch , err := compareHostCPUConditionalToActual (outcome .Fail .When , cpuInfo .LogicalCount , cpuInfo .PhysicalCount , cpuInfo .Flags , cpuInfo . MachineArch )
6767 if err != nil {
6868 return nil , errors .Wrap (err , "failed to compare" )
6969 }
@@ -84,7 +84,7 @@ func (a *AnalyzeHostCPU) Analyze(
8484 return []* AnalyzeResult {& result }, nil
8585 }
8686
87- isMatch , err := compareHostCPUConditionalToActual (outcome .Warn .When , cpuInfo .LogicalCount , cpuInfo .PhysicalCount , cpuInfo .Flags )
87+ isMatch , err := compareHostCPUConditionalToActual (outcome .Warn .When , cpuInfo .LogicalCount , cpuInfo .PhysicalCount , cpuInfo .Flags , cpuInfo . MachineArch )
8888 if err != nil {
8989 return nil , errors .Wrap (err , "failed to compare" )
9090 }
@@ -105,7 +105,7 @@ func (a *AnalyzeHostCPU) Analyze(
105105 return []* AnalyzeResult {& result }, nil
106106 }
107107
108- isMatch , err := compareHostCPUConditionalToActual (outcome .Pass .When , cpuInfo .LogicalCount , cpuInfo .PhysicalCount , cpuInfo .Flags )
108+ isMatch , err := compareHostCPUConditionalToActual (outcome .Pass .When , cpuInfo .LogicalCount , cpuInfo .PhysicalCount , cpuInfo .Flags , cpuInfo . MachineArch )
109109 if err != nil {
110110 return nil , errors .Wrap (err , "failed to compare" )
111111 }
@@ -164,14 +164,19 @@ func doCompareHostCPUFlags(expected string, flags []string) (res bool, err error
164164 return true , nil
165165}
166166
167- func compareHostCPUConditionalToActual (conditional string , logicalCount int , physicalCount int , flags []string ) (res bool , err error ) {
167+ func compareHostCPUConditionalToActual (conditional string , logicalCount int , physicalCount int , flags []string , machineArch string ) (res bool , err error ) {
168168 compareLogical := false
169169 comparePhysical := false
170170 compareUnspecified := false
171+ compareMachineArch := false
171172
172173 comparator := ""
173174 desired := ""
174175
176+ /* When the conditional is in the format of "logical <comparator> <desired>"
177+ example: when: "count < 2"
178+ */
179+
175180 parts := strings .Split (conditional , " " )
176181 if len (parts ) == 3 {
177182 comparator = parts [1 ]
@@ -182,6 +187,8 @@ func compareHostCPUConditionalToActual(conditional string, logicalCount int, phy
182187 comparePhysical = true
183188 } else if strings .ToLower (parts [0 ]) == "count" {
184189 compareUnspecified = true
190+ } else if strings .ToLower (parts [0 ]) == "machinearch" {
191+ compareMachineArch = true
185192 }
186193 } else if len (parts ) == 2 {
187194 compareUnspecified = true
@@ -199,14 +206,16 @@ func compareHostCPUConditionalToActual(conditional string, logicalCount int, phy
199206 return doCompareHostCPUFlags (desired , flags )
200207 }
201208
202- if ! compareLogical && ! comparePhysical && ! compareUnspecified {
209+ if ! compareLogical && ! comparePhysical && ! compareUnspecified && ! compareMachineArch {
203210 return false , errors .New ("unable to parse conditional" )
204211 }
205212
206213 if compareLogical {
207214 return doCompareHostCPU (comparator , desired , logicalCount )
208215 } else if comparePhysical {
209216 return doCompareHostCPU (comparator , desired , physicalCount )
217+ } else if compareMachineArch {
218+ return doCompareMachineArch (comparator , desired , machineArch )
210219 } else {
211220 actual := logicalCount
212221 if physicalCount > logicalCount {
@@ -217,6 +226,16 @@ func compareHostCPUConditionalToActual(conditional string, logicalCount int, phy
217226 }
218227}
219228
229+ func doCompareMachineArch (operator string , desired string , actual string ) (bool , error ) {
230+ switch operator {
231+ case "=" , "==" , "===" :
232+ return actual == desired , nil
233+ case "!=" , "!==" :
234+ return actual != desired , nil
235+ }
236+ return false , errors .New ("unknown operator" )
237+ }
238+
220239func doCompareHostCPU (operator string , desired string , actual int ) (bool , error ) {
221240 desiredInt , err := strconv .ParseInt (desired , 10 , 64 )
222241 if err != nil {
@@ -234,6 +253,8 @@ func doCompareHostCPU(operator string, desired string, actual int) (bool, error)
234253 return actual >= int (desiredInt ), nil
235254 case "=" , "==" , "===" :
236255 return actual == int (desiredInt ), nil
256+ case "!=" , "!==" :
257+ return actual != int (desiredInt ), nil
237258 }
238259
239260 return false , errors .New ("unknown operator" )
0 commit comments