Re: "returnszero" not working as expected

Xander Cage <[email protected]> Thu, 5 Sep 2024 01:00:51 -0700 (PDT)
Newsgroups gmane.comp.sysutils.cfengine.general
Message-ID <[email protected]>
hmm...maybe just my brain is fishy...as i use returnszero in many other 
promises and only this one is acting up i will check back.

but i guess you are right and its me who is out of touch a bit...

On Wednesday, September 4, 2024 at 5:25:55 PM UTC+2 
[email protected] wrote:

> Hi Chris,
>
> I am wondering if I could ask about your original question. I don't see a 
> problem with the following. Given the promise:
>
> "EN_NEEDS_CHANGE_SENDSPACE_$(device)"   expression => returnszero 
> ("/usr/sbin/lsattr -El $(device) -a tcp_sendspace -F value | /usr/bin/grep 
> -q 1048576", "useshell");
>
> Where device is en1 and the verbose output:
>
>  verbose: returnszero ran '/usr/sbin/lsattr -El en1 -a tcp_sendspace -F 
> value | /usr/bin/grep -q 1048576' successfully and it returned zero
>  verbose: Caching result for function 'returnszero("/usr/sbin/lsattr -El 
> $(device) -a tcp_sendspace -F value | /usr/bin/grep -q 1048576","useshell")'
>  verbose: C:     +  Private class: EN_NEEDS_CHANGE_SENDSPACE_en1
>
> hmm...scratching my head...but i dont get it...it says the command 
> returned zero but the class is set.
>
>
> So it would seem all is well. The command returns zero and so the value 
> given to the expression attribute is true aka "any" and should cause the 
> class to be defined.
>
> Also, when you ran Nick's example it seemed to act correctly.
>
> It's a bit hard to comment on the islessthan example since the value of 
> current_send_space_value is not given.
>
> What version of AIX are you running? And what is the default shell aka 
> what does `ls -l /bin/sh` give?
>
> Thanks!
> -Craig
>
> On Wed, Sep 4, 2024 at 6:53 AM Xander Cage <[email protected]> wrote:
>
>> i tried to use islessthan instead of returnszero...same 
>> problem...something is fishy
>>
>> "EN_NEEDS_CHANGE_SENDSPACE_$(device)"  expression => 
>> islessthan($(current_send_space_value), "1048576");
>>
>> On Wednesday, September 4, 2024 at 7:54:23 AM UTC+2 Xander Cage wrote:
>>
>>> i am just guessing...the cached result contains the unresolved instance 
>>> of the "$(device)" variable and this command
>>> is ran for every ethernet interface, might be that something is 
>>> overwritten here.
>>>
>>> verbose: C: BEGIN classes / conditions (pass 1)
>>>  verbose: returnszero ran '/usr/sbin/lsattr -El en0 -a tcp_sendspace -F 
>>> value | /usr/bin/grep -q 1048576' successfully and it returned zero
>>>
>>>  verbose: Caching result for function 'returnszero("/usr/sbin/lsattr -El 
>>> $(device) -a tcp_sendspace -F value | /usr/bin/grep -q 
>>> 1048576","useshell")'
>>>  verbose: C:     +  Private class: EN_NEEDS_CHANGE_SENDSPACE_en0
>>>
>>> On Wednesday, September 4, 2024 at 7:28:41 AM UTC+2 Xander Cage wrote:
>>>
>>>> hmm...your example works without any problems...
>>>>
>>>> root@aixtest01: /root/cfe_testbed # /var/cfengine/bin/cf-agent -KI -f ./
>>>> returnszero_issue.cf
>>>> R: CFEngine 3.21.5 on aixtest01
>>>>
>>>> R: The first returnszero() function evaluated true
>>>> R: The second returnszero() function did not evaluate true
>>>>
>>>> adding the action immediate also changes nothing...
>>>>
>>>> i tried the commands in shell without cfengine...correct returncodes ...
>>>>
>>>> root@aixtest01: /var/cfengine/inputs/itsv # /usr/sbin/lsattr -El en1 -a 
>>>> tcp_sendspace -F value | /usr/bin/grep -q 1048576; echo $?
>>>> 0
>>>>
>>>> root@aixtest01: /var/cfengine/inputs/itsv # /usr/sbin/chdev -a 
>>>> tcp_sendspace=16256 -l en1
>>>> en1 changed
>>>> root@aixtest01: /var/cfengine/inputs/itsv # /usr/sbin/lsattr -El en1 -a 
>>>> tcp_sendspace -F value | /usr/bin/grep -q 1048576; echo $?
>>>> 1
>>>>
>>>>
>>>>
>>>> On Tuesday, September 3, 2024 at 6:06:15 PM UTC+2 
>>>> [email protected] wrote:
>>>>
>>>>> Hi, 
>>>>>
>>>>> came across another weird thing… 
>>>>>
>>>>> i am running a command and setting a class on the return code…nothing 
>>>>> special 
>>>>>
>>>>> EN_NEEDS_CHANGE_SENDSPACE_$(device)" expression => returnszero 
>>>>> ("/usr/sbin/lsattr -El $(device) -a tcp_sendspace -F value | /usr/bin/grep 
>>>>> -q 1048576", "useshell"); 
>>>>>
>>>>> until now, i was sure the class is set wenn return is 0…unfortunatly 
>>>>> not in this case. 
>>>>>
>>>>> verbose output: 
>>>>>
>>>>> verbose: returnszero ran '/usr/sbin/lsattr -El en1 -a tcp_sendspace -F 
>>>>> value | /usr/bin/grep -q 1048576' successfully and it returned zero 
>>>>> verbose: Caching result for function 'returnszero("/usr/sbin/lsattr -El 
>>>>> $(device) -a tcp_sendspace -F value | /usr/bin/grep -q 
>>>>> 1048576","useshell")' verbose: C: + Private class: 
>>>>> EN_NEEDS_CHANGE_SENDSPACE_en1 
>>>>>
>>>>> hmm…scratching my head…but i dont get it…it says the command returned 
>>>>> zero but the class is set. 
>>>>>
>>>>> if i do this it works as expected… 
>>>>>
>>>>> "EN_NEEDS_CHANGE_SENDSPACE_$(device)" not => returnszero 
>>>>> ("/usr/sbin/lsattr -El $(device) -a tcp_sendspace -F value | /usr/bin/grep 
>>>>> -q 1048576", "useshell"); 
>>>>>
>>>>> i mean, i have no problem with setting it to "not", but an 
>>>>> explaination of this reversed behaviour would be nice. 
>>>>>
>>>>> cfe version is 3.21.5, platform is aix 
>>>>>
>>>>> Hi Chris, 
>>>>>
>>>>> Can you create some simple standalone policy to demonstrate the 
>>>>> differing behavior on different client versions on the same host? 
>>>>>
>>>>> For example, here is a very simple policy that is similar in nature to 
>>>>> your snippet. 
>>>>>
>>>>> bundle agent __main__{
>>>>>   classes:
>>>>>     "RETURNSZERO_ECHO_PIPE_GREP_TRUE"
>>>>>       expression => returnszero("/bin/echo hello | /usr/bin/grep -q el", "useshell" );
>>>>>     "RETURNSZERO_ECHO_PIPE_GREP_FALSE"
>>>>>       expression => returnszero("/bin/echo hello | /usr/bin/grep -q NOPE", "useshell" );
>>>>>
>>>>>   reports:
>>>>>      "CFEngine $(sys.cf_version) on $(sys.fqhost)";
>>>>>     RETURNSZERO_ECHO_PIPE_GREP_TRUE::
>>>>>      "The first returnszero() function evaluated true";
>>>>>     !RETURNSZERO_ECHO_PIPE_GREP_FALSE::
>>>>>      "The second returnszero() function did not evaluate true";}
>>>>>
>>>>> R: CFEngine 3.24.0a.fc037ae3b on precision-5570
>>>>> R: The first returnszero() function evaluated true
>>>>> R: The second returnszero() function did not evaluate true
>>>>>
>>>>> Since there is a pipe in play in your example, I wonder if that is 
>>>>> involved, perhaps a difference in which command is returning zero or not. 
>>>>> Also, returnszero is a cached function, so your probe could be stale from 
>>>>> start of the agent run, adding action => immediate to the promise 
>>>>> should override caching for that promise. 
>>>>>
>>>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "help-cfengine" 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/help-cfengine/92c08ea5-6369-41eb-bc59-93ee76b64d30n%40googlegroups.com 
>> <https://groups.google.com/d/msgid/help-cfengine/92c08ea5-6369-41eb-bc59-93ee76b64d30n%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>
>
> -- 
>
> *Craig Comstock* (he/him)
> CFEngineer/Digger | CFEngine <https://cfengine.com/>
> Kansas, USA
>  <https://www.linkedin.com/company/northern.tech> <https://twitter.com/northerntechhq> <https://northern.tech> Northern.tech <https://northern.tech> | Securing the world's connected devices
>
>

-- 
You received this message because you are subscribed to the Google Groups "help-cfengine" 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/help-cfengine/53e1e3bb-c78f-411f-93bf-23574fa93747n%40googlegroups.com.