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

Reply via email to