Re: "returnszero" not working as expected
Xander Cage <[email protected]> Tue, 3 Sep 2024 22:28:41 -0700 (PDT)
| Newsgroups | gmane.comp.sysutils.cfengine.general |
|---|---|
| Message-ID | <[email protected]> |
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/898dc601-b5a9-4d6c-a397-22516334b59cn%40googlegroups.com.