babudro-

It _is_ confusing, but the explanation is simple:

In one edit cycle, Cfengine considers the insertion of each line, one at a 
time.  If it sees a line already present that it is supposed to insert, it does 
not insert it twice.  So each of your blank comment lines are the same - and 
only one of them gets inserted.  You can fuss with this by adding a different 
number of spaces at the end of each one, or as was suggested, look at 
"preserve_block".

-Dan

On Oct 19, 2010, at 9:19 AM, no-re...@cfengine.com wrote:

> Forum: Cfengine Help
> Subject: Strange behaviour with insert_lines
> Author: babudro
> Link to topic: https://cfengine.com/forum/read.php?3,18780,18780#msg-18780
> 
> I'm baffled by a behaviour of insert_lines that I just came across.  Has 
> anyone else run into this or can someone explain the rationale?
> 
> If my insert_lines block looks like this:
> 
> bundle edit_line ntp_rewrite {
>  insert_lines:
>    "# NTP (time) configuration";
>    "#";
>    "# This file is maintained by Cfengine.";
>    "# Changes will be defenstrated.";
>    "#";
>    "# This configuration is for a server w/out VMware.";
>    "# VMware has its own NTP facility.";
>    "#";
>    "restrict default kod nomodify notrap nopeer noquery";
> (&c.)
> 
> 
> ...then the end result is this:
> 
> 
> # NTP (time) configuration
> #
> # This file is maintained by Cfengine.
> # Changes will be defenestrated.
> # This configuration is for a server WITHOUT VMware.
> # VMware has its own NTP facility.
> restrict default kod nomodify notrap nopeer noquery
> (&c.)
> 
> 
> Notice the missing 2nd and 3rd blank comment lines are present for 
> readability.
> 
> I try adding a space after the last hash-mark like so:
> 
> 
>  insert_lines:
>    "# NTP (time) configuration";
>    "#";
>    "# This file is maintained by Cfengine.";
>    "# Changes will be defenstrated.";
>    "#";
>    "# This configuration is for a server WITHOUT VMware.";
>    "# VMware has its own NTP facility.";
>    "# ";
>    "restrict default kod nomodify notrap nopeer noquery";
> (&c.)
> 
> 
> ... run cf-agent -IKb and I get this:
> 
> 
> # NTP (time) configuration
> #
> # This file is maintained by Cfengine.
> # Changes will be defenestrated.
> # This configuration is for a server WITHOUT VMware.
> # VMware has its own NTP facility.
> #
> restrict default kod nomodify notrap nopeer noquery
> (&c.)
> 
> 
> Now add in a space after the second lone hash-mark, i.e.:
> 
> 
>  insert_lines:
>    "# NTP (time) configuration";
>    "#";
>    "# This file is maintained by Cfengine.";
>    "# Changes will be defenestrated.";
>    "# ";
>    "# This configuration is for a server WITHOUT VMware.";
>    "# VMware has its own NTP facility.";
>    "# ";
>    "restrict default kod nomodify notrap nopeer noquery";
> (&c.)
> 
> 
> ... and now I lost the 3rd one!
> 
> 
> # NTP (time) configuration
> #
> # This file is maintained by Cfengine.
> # Changes will be defenestrated.
> #
> # This configuration is for a server WITHOUT VMware.
> # VMware has its own NTP facility.
> restrict default kod nomodify notrap nopeer noquery
> (&c.)
> 
> 
> Finally, I add a space after the top hash-mark, so that all three solo 
> hash-marks become hash+space "# ", and I am back to square one as if I had 
> removed the space from them all:
> 
> 
> # NTP (time) configuration
> #
> # This file is maintained by Cfengine.
> # Changes will be defenestrated.
> # This configuration is for a server WITHOUT VMware.
> # VMware has its own NTP facility.
> restrict default kod nomodify notrap nopeer noquery
> (&c.)
> 
> 
> But if I place the comments in one large quoted-string, like this:
> 
> 
>  insert_lines:
>    "# NTP (time) configuration
> #
> # This file is maintained by Cfengine.
> # Changes will be defenestrated.
> #
> # This configuration is for a server WITHOUT VMware.
> # VMware has its own NTP facility.
> #";
>    "restrict default kod nomodify notrap nopeer noquery";
>    "restrict -6 default kod nomodify notrap nopeer noquery";
> (&c.)
> 
> 
> ... I get the output I want:
> 
> 
> # NTP (time) configuration
> #
> # This file is maintained by Cfengine.
> # Changes will be defenestrated.
> #
> # This configuration is for a server WITHOUT VMware.
> # VMware has its own NTP facility.
> #
> restrict default kod nomodify notrap nopeer noquery
> (&c.)
> 
> 
> Thinking it might be a regex pattern bug, I tried using "?#" instead of a 
> hash-mark alone, and also tried "#.", but got no change.  Then I tried "#foo" 
> and "# foo" and was astonished to get the same result.  Surely "foo" is not 
> regex... eureka! -- could it be that whatever I put in the first comment line 
> is being ignored when it finds a matching line lower down?  I tried this:
> 
> 
> bundle edit_line ntp_rewrite {
>  insert_lines:
>    "# NTP (time) configuration";
>    "# Mary had a little lamb.";
>    "# This file is maintained by Cfengine.";
>    "# Changes will be defenestrated.";
>    "# Mary had a little lamb.";
>    "# This configuration is for a server WITHOUT VMware.";
>    "# VMware has its own NTP facility.";
>    "# Mary had a little lamb.";
>    "restrict default kod nomodify notrap nopeer noquery";
> (&c.)
> 
> 
> ... and, yes, the 2nd and 3rd ones are missing in the output.
> 
> Is this a bug or a feature I am not understanding?  If it's a feature, I 
> would appreciate if someone could give some insight on its application.
> 
> BTW, this behaviour has been verified on both 32-bit and 64-bit machines, in 
> both 3.0.5p1 and 3.1.0b2.
> 
> Thanks!
> 
> _______________________________________________
> Help-cfengine mailing list
> Help-cfengine@cfengine.org
> https://cfengine.org/mailman/listinfo/help-cfengine

_______________________________________________
Help-cfengine mailing list
Help-cfengine@cfengine.org
https://cfengine.org/mailman/listinfo/help-cfengine

Reply via email to