Re: "commands: arglist" mismatch between behaviour and documentation?
Mike Weilgart <[email protected]> Fri, 15 Sep 2023 09:06:17 -0700
| Newsgroups | gmane.comp.sysutils.cfengine.general |
|---|---|
| Message-ID | <CAG2q_3yKZm_ZWB2sJ-jz6oOXvqb8Ms9qb6nAfCZsB_iDqT8Rrw@mail.gmail.com> |
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/CAG2q_3yKZm_ZWB2sJ-jz6oOXvqb8Ms9qb6nAfCZsB_iDqT8Rrw%40mail.gmail.com.