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
[email protected]
https://cfengine.org/mailman/listinfo/help-cfengine