I disagree, the way it works breaks basic logic.
With the == case, if the property is an array type, the code will only 
return objects that contain the term.
The != case only checks for equality, regardless of the object type. It 
*should*, in my opinion, follow basic negation rules and do the opposite of 
the == case. We should get back objects that dont equal or contain the term.

That makes sense and follows all the normal behaviour you should expect 
from searching through objects, array or otherwise.

I have submitted a jira ticket with a pull request if you are interested in 
more detail:
https://tickets.puppetlabs.com/browse/PUP-6723

On Wednesday, September 21, 2016 at 11:30:52 PM UTC-7, Johan De Wit wrote:
>
>
>
> -----Original message-----
> *From:* Isaiah Frantz <[email protected] <javascript:>>
> *Sent:* Wednesday 21st September 2016 21:35
> *To:* Puppet Users <[email protected] <javascript:>>
> *Subject:* [Puppet Users] resource collector with multiple 'tag !=' test
>
> Hello, 
> I am trying to realize users and am not getting what I expect with 
> multiple != test.
> Here is a simplified version that I have tested with puppet gem 4.2.2 and 
> 4.6.2 (results were the same for all tests):
> cat t.ppt.pp (common to all tests): 
> @notify {'This is a test 1':
>         tag => 'one'
> }
> @notify {'This is a test 2':
>         tag => 'two'
> }
> @notify {'This is a test 3':
>         tag => ['one', 'two']
> }
> @notify {'This is a test 4':
>         tag => 'three'
> }
> Notify <| test_goes_here |>
>
> First 3 expected:
> tail -1 t.pp 
> Notify <| tag == 'one' or tag == 'two' |>
>
> puppet apply t.pp 
> Notice: Compiled catalog for defiant.cequintecid.com in environment 
> production in 0.70 seconds
> Notice: This is a test 1
> Notice: /Stage[main]/Main/Notify[This is a test 1]/message: defined 
> 'message' as 'This is a test 1'
> Notice: This is a test 2
> Notice: /Stage[main]/Main/Notify[This is a test 2]/message: defined 
> 'message' as 'This is a test 2'
> Notice: This is a test 3
> Notice: /Stage[main]/Main/Notify[This is a test 3]/message: defined 
> 'message' as 'This is a test 3'
> Notice: Applied catalog in 0.02 seconds
>
>
> Test 3 only, as expected:
> tail -1 t.pp 
> Notify <| tag == 'one' and tag == 'two' |>
>
> puppet apply t.pp 
> Notice: Compiled catalog for defiant.cequintecid.com in environment 
> production in 0.47 seconds
> Notice: This is a test 3
> Notice: /Stage[main]/Main/Notify[This is a test 3]/message: defined 
> 'message' as 'This is a test 3'
> Notice: Applied catalog in 0.02 seconds
>
> Now we get to the '!=' tests.
> with a single tag it works as expected so I wont take space here to show 
> that.
> With multiple tags, it does not work as expected
>
> Since tags is a hash that contains lots of things, including all explicit 
> tag's set on a resource. The == and != operators are supposed to act like 
> contains and !contains functions (or so I thought)
> Here I expect to only get test 4. 1 and 2 are filtered because one of the 
> and'ed tests is false.
> 3 should fail too because both test are false: tags contains both 'one' 
> and 'two'. 
> tail -1 t.pp 
> Notify <| tag != 'one' and tag != 'two' |>
>
> puppet apply t.pp 
> Notice: Compiled catalog for defiant.cequintecid.com in environment 
> production in 0.48 seconds
> Notice: This is a test 3
> Notice: /Stage[main]/Main/Notify[This is a test 3]/message: defined 
> 'message' as 'This is a test 3'
> Notice: This is a test 4
> Notice: /Stage[main]/Main/Notify[This is a test 4]/message: defined 
> 'message' as 'This is a test 4'
> Notice: Applied catalog in 0.01 seconds
>
>
> Frankly, I also expect that 3 should be filtered from the or version too 
> because neither of the tests should be true if this is a contains function 
> and not one that tests against each hash value.
> tail -1 t.pp                                                               
>                                                   
> Notify <| tag != 'one' or tag != 'two' |>
>
> puppet apply t.pp 
> Notice: Compiled catalog for defiant.cequintecid.com in environment 
> production in 0.58 seconds
> Notice: This is a test 1
> Notice: /Stage[main]/Main/Notify[This is a test 1]/message: defined 
> 'message' as 'This is a test 1'
> Notice: This is a test 2
> Notice: /Stage[main]/Main/Notify[This is a test 2]/message: defined 
> 'message' as 'This is a test 2'
> Notice: This is a test 3
> Notice: /Stage[main]/Main/Notify[This is a test 3]/message: defined 
> 'message' as 'This is a test 3'
> Notice: This is a test 4
> Notice: /Stage[main]/Main/Notify[This is a test 4]/message: defined 
> 'message' as 'This is a test 4'
> Notice: Applied catalog in 0.02 seconds
>
>
>
> Two boolean falses dont make a true do they?
> Im confused  :(
>
> The query could be explained as follows :
>
>
> If iether there is a tag that is not 'one', or there is a tag that is not 
> two, then it will be collected.
>
> test1 : tag => one is != two, so that gives us true, and this collected
>
> test2: tag => two is != one, so here also gives us true and thus collected
>
> test3: tag => [ one , two].  as soon as there is one tag in the array that 
> return true, than the resource is collected.  In your case one != two and 
> aslo  two!=one, which makes the rersource collected. 
>
> test4: tag => three differs from both one and two
>
>
> It is clear one needs to be carefull when defining the query in a 
> collector.  Don't assume it works as we are used to work in conditionals as 
> we are used in normal programming.  
>
>
> I hope i didn't confuse too much.
>
>
> Hth
>
>
> johan
>
>
>
>
>
>
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Puppet Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected] <javascript:>.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/puppet-users/e31573bc-b306-482b-bf64-762a0ba9dfca%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/puppet-users/e31573bc-b306-482b-bf64-762a0ba9dfca%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>
>
> Upcoming Trainings:
>
> Bacula Training | https://www.open-future.be/calendar
>
> Puppet Training | https://www.open-future.be/calendar
>
> Linux Training | https://www.open-future.be/calendar
>
> Zabbix Training | https://www.open-future.be/calendar
>
> Subscribe to our newsletter: http://eepurl.com/BUG8H
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-users/1663431e-c20a-4e1c-b8be-56f04a53bdb2%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to