Bug 1670002

Summary: wrong ordering of a smart variable matchers applied when a parameter is in a compound matcher and also standalone
Product: Red Hat Satellite Reporter: Pavel Moravec <pmoravec>
Component: Smart VariablesAssignee: Tomer Brisker <tbrisker>
Status: CLOSED ERRATA QA Contact: Peter Ondrejka <pondrejk>
Severity: medium Docs Contact:
Priority: unspecified    
Version: 6.3.4CC: andrew.schofield, egolov, ehelms, inecas, mmccune, orabin, tbrisker
Target Milestone: 6.5.0Keywords: Triaged
Target Release: Unused   
Hardware: x86_64   
OS: Linux   
Whiteboard:
Fixed In Version: foreman-1.20.1.22-1 Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2019-05-14 12:39:54 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Pavel Moravec 2019-01-28 10:40:08 UTC
Description of problem:
Having a smart variable with overriding rules like:

Prioritize attribute order:
atributeOne,attributeTwo
attributeTwo

then attributeTwo is taken with _higher_ priority than the compound one.

Thanks to tbrisker++, the cause is:

Sat6.3:
https://github.com/theforeman/foreman/blob/1.15-stable/app/services/classification/base.rb#L50

that is executed as:

[16] pry(main)> "domain,ip\r\ndomain,netmask\r\ndomain".index('domain')
=> 0

instead of proper code:

[17] pry(main)> "domain,ip\r\ndomain,netmask\r\ndomain".split.index('domain')
=> 2

Sat6.4 has the same bug in:
https://github.com/theforeman/foreman/blob/1.18-stable/app/services/classification/values_hash_query.rb#L64


Version-Release number of selected component (if applicable):
any


How reproducible:
100%


Steps to Reproduce:
1. Have a Host with a puppet class applied (e.g. access_insights_client).
2. For the class, override a parameter by having:

Prioritize attribute order:
domain,netmask
domain,hostgroup
os
domain
hostgroup

Specify matchers:
domain,netmask = (insert values from the Host)   => Value1
domain,hostgroup = (insert values from the Host) => Value2
os = (insert value from the Host)                => Value3
domain = (insert value from the Host)            => Value4

3.
Check YAML/ENC of the Host and find the overriden smart parameter value


Actual results:
The parameter value will be Value4, and domain attribute matcher applied


Expected results:
Value1 to be applied, and domain,netmask attribute matcher applied.


Additional info:

Comment 3 Pavel Moravec 2019-01-28 10:41:48 UTC
Raising 6.[3,4].z due to that particular customer behind, and trivial fix available (add ".split" to one line).

Comment 4 Tomer Brisker 2019-01-28 10:44:05 UTC
Connecting redmine issue https://projects.theforeman.org/issues/16591 from this bug

Comment 5 Bryan Kearney 2019-01-28 13:02:57 UTC
Upstream bug assigned to tbrisker

Comment 6 Bryan Kearney 2019-01-28 13:02:59 UTC
Upstream bug assigned to tbrisker

Comment 7 Bryan Kearney 2019-01-29 13:03:10 UTC
Moving this bug to POST for triage into Satellite 6 since the upstream issue https://projects.theforeman.org/issues/16591 has been resolved.

Comment 9 Peter Ondrejka 2019-03-22 19:53:33 UTC
Verified on Satellite 6.5 snap 20. overriding params in access_insights_clients + steps from problem description. Compound keys take priority if they come first in the list than separate matches.

Comment 12 errata-xmlrpc 2019-05-14 12:39:54 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHSA-2019:1222