Forum: CFEngine Help Subject: Re: How-to insert multi line string at the top of file ? Author: juriskrumins Link to topic: https://cfengine.com/forum/read.php?3,27226,27241#msg-27241
I understand your arguments and documentation also prove it. But I still need to solve this issue and so come up with 2 possible (not very elegant and probably, in some cases, buggy) solutions. Plus the one you've recommended - use template (which is probably the best one). And so the first one is the obvious and straight forward way to solve issue - simply reverse the order of multi line string. # cat promises.cf body common control { bundlesequence => { "multiline1", "multiline2", }; inputs => { "cfengine_stdlib.cf", }; } bundle agent multiline1 { vars: "banner" string => "1 line 2 line"; files: "/root/test1" edit_line => multiline_edit("$(banner)"); } bundle agent multiline2 { vars: "banner" string => "2 line 1 line"; files: "/root/test2" edit_line => multiline_edit("$(banner)"); } bundle edit_line multiline_edit(string) { insert_lines: "$(string)" location => myloc("1"); } body location myloc(linenum) { before_after => "before"; select_line_number => "$(linenum)"; } # cf-agent -f /root/cfpol/promises.cf # cat /root/test1 2 line 1 line test data test data test data test data # cat /root/test2 1 line 2 line test data test data test data test data # The second approach is to put marker inside of the file and use this marker as a starting point to insert multiline string after the marker: # cat promises.cf body common control { bundlesequence => { "multiline1", }; inputs => { "cfengine_stdlib.cf", }; } bundle agent multiline1 { vars: "marker" string => "###marker###"; "banner" string => "1 line$(const.n)2 line"; files: "/root/test1" edit_line => insert_single_line("$(marker)"), classes => if_ok("signal_class"); signal_class:: "/root/test1" edit_line => multiline_edit("$(banner)","$(marker)"); } bundle edit_line insert_single_line(string) { insert_lines: "$(string)" location => myloc("1"); } bundle edit_line multiline_edit(string,marker) { insert_lines: "$(string)" location => myloc1($(marker)); } body location myloc(linenum) { before_after => "before"; select_line_number => "$(linenum)"; } body location myloc1(marker) { select_line_matching => "$(marker)"; } # cf-agent -f /root/cfpol/promises.cf # cat /root/test1 ###marker### 1 line 2 line test data test data test data test data # Maybe this will help somebody, but I still need to point to documentation https://cfengine.com/manuals/cf3-Reference#insert_005ftype-in-insert_005flines and warn about the possible problems Neilh have mentioned. _______________________________________________ Help-cfengine mailing list Help-cfengine@cfengine.org https://cfengine.org/mailman/listinfo/help-cfengine