In the approach given, the file is edited twice - once to add each line. You have to think "sub-routines". Editing is a bundle of promises itself.
My Christmas bundle will help to make this clearer. Aleksey Tsalolikhin wrote: > Dear Brendan, > > I tried out your code below, expecting it to create > > search example.com > nameserver 192.168.1.1 > nameserver 192.168.1.2 > > but it only created: > > search example.com > nameserver 192.168.1.1 > > I am using cfengine 3.0.2 community edition, and calling the code with > "cf-agent -f resolv.cf". > > Does this work for you? If so, what am I doing wrong? > > Thanks, > -at > > > On Sun, Dec 13, 2009 at 1:53 PM, Brendan Strejcek <strej...@gmail.com> wrote: >> Currently there is no map() function, but you can get a similar result >> using iteration. >> >> body common control { >> bundlesequence => { 'example' }; >> } >> >> bundle agent example { >> vars: >> any:: >> 'nameserver' slist => { '192.168.1.1', '192.168.1.2' }; >> 'search' string => 'example.com'; >> 'resolv' string => '/tmp/resolv.conf'; >> files: >> any:: >> "${resolv}" >> create => 'true', >> edit_line => AppendIfNoSuchLine("search ${search}"); >> "${resolv}" >> edit_line => AppendIfNoSuchLine("nameserver ${nameserver}"); >> } >> >> bundle edit_line AppendIfNoSuchLine(line) { >> classes: >> 'line_absent' not => regline("^${line}$","${edit.filename}"); >> insert_lines: >> line_absent:: >> "${line}"; >> } >> >> On Mon, Nov 30, 2009 at 6:53 AM, Matthias Teege <matthias-...@mteege.de> >> wrote: >>> Moin, >>> >>> I have a question about list substition. I want to create a resolv.conf >>> from variables. >>> >>> "dom" string => "example.com"; >>> "dns" slist => { "192.168.1.1", "192.168.1.2" }; >>> >>> It would be nice if i can use a generic add_line macro like this one: >>> >>> bundle edit_line add_line(value) { >>> insert_lines: >>> "${value}"; >>> } >>> >>> I can create a new list and use add_line: >>> >>> "resolv" slist => { "search $(dom)", @(dns) }; >>> >>> "resolv.conf" >>> >>> edit_line => add_line (@(resolv)); >>> >>> But this does not give me a usefull resolv.conf because I missing >>> "nameserver". Something like >>> >>> "resolv" slist => { "search $(dom)", "nameserver $(dns)" }; >>> >>> does not work. >>> >>> Is it possible to "simulate" some kind of map function or list >>> comprehension in cfe3? In python I can write: >>> >>> [ "nameserver %s" % h for h in ('192.168.1.1', '192.168.1.2') ] >>> >>> which gives me a new list. >>> >>> ['nameserver 192.168.1.1', 'nameserver 192.168.1.2'] >>> >>> Is there something simular in cfe? >>> >>> Many thanks >>> Matthias >>> >>> _______________________________________________ >>> 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 >> > _______________________________________________ > Help-cfengine mailing list > Help-cfengine@cfengine.org > https://cfengine.org/mailman/listinfo/help-cfengine -- Mark Burgess ------------------------------------------------- Professor of Network and System Administration Oslo University College, Norway Personal Web: http://www.iu.hio.no/~mark Office Telf : +47 22453272 ------------------------------------------------- _______________________________________________ Help-cfengine mailing list Help-cfengine@cfengine.org https://cfengine.org/mailman/listinfo/help-cfengine