Re: "commands: arglist" mismatch between behaviour and documentation?
"'Lars Erik Wik' via help-cfengine" <[email protected]> Fri, 19 Jan 2024 01:05:40 -0800 (PST)
| Newsgroups | gmane.comp.sysutils.cfengine.general |
|---|---|
| Message-ID | <[email protected]> |
FYI, this bug will be fixed in CFEngine 3.24. For more info check out this blog post https://cfengine.com/blog/2024/change-in-behavior-arglist/ Thanks for reporting it. On Wednesday, September 20, 2023 at 12:39:22 PM UTC+2 Lars Erik Wik wrote: > Glad to hear! Thanks for sharing your solution with the clever use of > maplist. > > On Wednesday, September 20, 2023 at 12:08:10 PM UTC+2 > [email protected] wrote: > >> Lars and Mike, >> >> Thanks for your replies on this. Appreciated and useful! >> >> Given an incoming, pre-existing "@(lines)" slist that includes elements >> which potentially contain embedded spaces, and following Lars' useful >> suggestion, I have inserted: >> >> vars: >> any:: >> "lines_q" slist => maplist("'$(this)'", "@(lines)"); >> >> which simply puts additional quotes around each. I then use that new >> "@(lines_q)" from that point onwards. >> >> (As Mike hints, this isn't a full, general-purpose solution. But for the >> present it looks sufficient in this particular, relatively simple, >> instance.) >> >> >> -- David Lee >> >> On Friday, 15 September 2023 at 17:06:31 UTC+1 [email protected] wrote: >> >>> Thanks, Lars! >>> >>> Side note about nested quoting, probably the cleanest and most flexible >>> syntax I've seen for nested quoting when it would otherwise get really >>> hairy, is that used by Postgres: >>> https://www.postgresql.org/docs/current/sql-syntax-lexical.html#SQL-SYNTAX-DOLLAR-QUOTING >>> >>> --Mike Weilgart >>> >>> On Fri, Sep 15, 2023 at 2:28 AM 'Lars Erik Wik' via help-cfengine < >>> [email protected]> wrote: >>> >>>> Hi all >>>> >>>> Thanks for shedding a light on this issue again. I've linked the issues >>>> and pushed the CFE-2724 ticket to the top of the backlog. As a temporary >>>> workaround you can use nested quoting, e.g.: >>>> >>>> ``` >>>> $ cat ~/test.cf >>>> bundle agent __main__ >>>> { >>>> files: >>>> "/tmp/test.py" >>>> content => "import sys; print(*(arg for arg in sys.argv), >>>> sep='\n')"; >>>> commands: >>>> "/usr/bin/python3 /tmp/test.py" >>>> args => "two `three four`", >>>> arglist => { "five", "'six seven'" }; >>>> } >>>> $ /var/cfengine/bin/cf-agent -Kf ~/test.cf >>>> notice: Q: "...in/python3 /tmp": /tmp/test.py >>>> Q: "...in/python3 /tmp": two >>>> Q: "...in/python3 /tmp": three four >>>> Q: "...in/python3 /tmp": five >>>> Q: "...in/python3 /tmp": six seven >>>> ``` >>>> >>>> On Friday, September 15, 2023 at 6:01:50 AM UTC+2 [email protected] >>>> wrote: >>>> >>>>> Hi David, >>>>> >>>>> I thought this sounded familiar, and indeed, I reported the same bug >>>>> five years ago! https://northerntech.atlassian.net/browse/CFE-2869 >>>>> >>>>> And it was reported a year before that as well: >>>>> https://northerntech.atlassian.net/browse/CFE-2724 >>>>> >>>>> And David, I see that you've now successfully reported the issue as >>>>> https://northerntech.atlassian.net/browse/CFE-4253, also. >>>>> >>>>> To Northern Tech: I suggest that the code should be fixed for a future >>>>> CFEngine version, AND that the documentation should be fixed for all >>>>> existing CFEngine versions. Should be modified to better describe what the >>>>> code actually does, and then a note should be inserted in a little text box >>>>> for the benefit of those rereading the docs who've read it before, saying >>>>> something like, "NOTE: This documentation previously implied that the >>>>> elements of arglist were each treated as separate arguments and could >>>>> contain spaces or quotes; however the behavior of the code did not match >>>>> this documentation, so the documentation has been updated. A future >>>>> CFEngine version may modify this behavior; see (link) for the bug tracking >>>>> info." >>>>> >>>>> Or just quietly update the doc to be more precisely descriptive, since >>>>> it doesn't actually *say* how the arglist is currently processed, it just >>>>> implies it with the "particularly useful" statement. >>>>> >>>>> The documentation fix should be fairly trivial and I submit there's >>>>> really no good reason to leave inaccurate documentation there to trip >>>>> people up, even if the coding fix takes a while to prioritize and >>>>> accomplish. >>>>> >>>>> ...Hmm, interesting, I think there is currently no way to have >>>>> explicit control over how CFEngine handles the whitespace splitting in a >>>>> commands promise...maybe an attribute for this could be added, with the >>>>> default set to be the current behavior, for backward compatibility. Maybe >>>>> call it "argsplitting" and default it to "whitespace" (IF that is an >>>>> accurate description of current code behavior; I think it is), and have >>>>> another option "none" which would result in *args* being treated as one >>>>> single argument; and *arglist* being treated as exactly as many arguments >>>>> as appear as elements in that list. >>>>> >>>>> Best, >>>>> --Mike Weilgart >>>>> On Thursday, September 14, 2023 at 7:26:03 AM UTC-7 >>>>> [email protected] wrote: >>>>> >>>>>> I appear no longer to have login access to be able to report issues. >>>>>> (Previous issues with my involvement include CFE-3020, CFE-1655, CFE-2908, >>>>>> etc.) I'm trying to regain that access, but it is not proving easy! If >>>>>> that can be restored then I can report the issue. >>>>>> >>>>>> Otherwise, could you log the issue for me? >>>>>> >>>>>> Thanks. >>>>>> >>>>>> -- David Lee >>>>>> On Wednesday, 13 September 2023 at 14:55:30 UTC+1 >>>>>> [email protected] wrote: >>>>>> >>>>>>> On Wed, 2023-09-13 at 06:38 -0700, [email protected] >>>>>>> wrote: >>>>>>> > Using 3.18.5 community edition on RHEL9; also 3.15 on RHEL7 and >>>>>>> RHEL8 >>>>>>> > >>>>>>> > Documentation >>>>>>> https://docs.cfengine.com/docs/3.18/reference-promise-types-commands.html >>>>>>> gives the example: >>>>>>> > ------------------------------------------------- >>>>>>> > commands: "/bin/echo one" args => "two three", arglist => { >>>>>>> "four", "five" }; >>>>>>> > So in the example above the command would be: >>>>>>> > /bin/echo one two three four five >>>>>>> > ------------------------------------------------- >>>>>>> > >>>>>>> > It also states:------------------------------------------------- >>>>>>> > That's particularly useful when there are embedded spaces and >>>>>>> quotes in your arguments... >>>>>>> > ------------------------------------------------- >>>>>>> > >>>>>>> > So I'm trying to build something, specifically requiring that >>>>>>> "embedded spaces" claim. But I hit a problem, so strip it down to a >>>>>>> proof-of-concept script: >>>>>>> > ------------------------------------------------- >>>>>>> > #! /bin/bash >>>>>>> > echo "argcount: $#" >>>>>>> > for (( i=1 ; i<=$#; i++)) >>>>>>> > do >>>>>>> > echo "${i}:${!i}" >>>>>>> > done >>>>>>> > ------------------------------------------------- >>>>>>> > >>>>>>> > At the command line I verify the script: >>>>>>> > ------------------------------------------------- >>>>>>> > $ ./modules/printargs A B "C with spaces" D >>>>>>> > argcount: 4 >>>>>>> > 1:A >>>>>>> > 2:B >>>>>>> > 3:C with spaces >>>>>>> > 4:D >>>>>>> > $ >>>>>>> > ------------------------------------------------- >>>>>>> > (Four arguments, the third being three words with embedded >>>>>>> spaces.) >>>>>>> > >>>>>>> > I then run it from within our CFEngine framework: >>>>>>> > ------------------------------------------------- >>>>>>> > commands: >>>>>>> > any:: >>>>>>> > "$(gcom.modulesdir)/printargs" >>>>>>> > arglist => { "A", "B", "C with spaces", "D" }; >>>>>>> > ------------------------------------------------- >>>>>>> > >>>>>>> > But instead of receiving four arguments, it receives six: here's >>>>>>> the CFE "inform" output: >>>>>>> > ------------------------------------------------- >>>>>>> > info: Executing 'no timeout' ... '[...]/modules/printargs A B >>>>>>> C with spaces D' >>>>>>> > notice: Q: ".../printargs A B ": argcount: 6 >>>>>>> > Q: ".../printargs A B ": 1:A >>>>>>> > Q: ".../printargs A B ": 2:B >>>>>>> > Q: ".../printargs A B ": 3:C >>>>>>> > Q: ".../printargs A B ": 4:with >>>>>>> > Q: ".../printargs A B ": 5:spaces >>>>>>> > Q: ".../printargs A B ": 6:D >>>>>>> > info: Last 7 quoted lines were generated by promiser >>>>>>> > ------------------------------------------------- >>>>>>> > That useful "embedded spaces" claim in the documentation seems to >>>>>>> be being ignored. >>>>>>> > >>>>>>> > Is the bug/problem: >>>>>>> > * in the code >>>>>>> > * or in the documentation >>>>>>> > * or in my interpretation of the documentation >>>>>>> > Help appreciated >>>>>>> Definitely looks like a bug in the CFEngine code to me. I'm just >>>>>>> surprised there's no failing test >>>>>>> for this. Please report the issue at >>>>>>> https://northerntech.atlassian.net/browse/CFE >>>>>>> >>>>>>> Thanks! >>>>>>> >>>>>>> -- >>>>>>> Vratislav >>>>>>> >>>>>> -- >>>> You received this message because you are subscribed to a topic in the >>>> Google Groups "help-cfengine" group. >>>> To unsubscribe from this topic, visit >>>> https://groups.google.com/d/topic/help-cfengine/70qc5E83BMA/unsubscribe >>>> . >>>> To unsubscribe from this group and all its topics, send an email to >>>> [email protected]. >>>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/help-cfengine/7f369e0e-4b13-460a-a613-5538835a628dn%40googlegroups.com >>>> <https://groups.google.com/d/msgid/help-cfengine/7f369e0e-4b13-460a-a613-5538835a628dn%40googlegroups.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>> -- 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/323c2810-00b8-4b17-818e-2f0a90548c70n%40googlegroups.com.