I still think you're making future development/debugging a difficult process, 
but I also like the way you're setting things up - it is clean and easy to 
understand, and that is _always_ a good thing :-)

-Dan

On Nov 9, 2010, at 2:51 AM, Marc Baudoin wrote:

> Marc Baudoin <baud...@stg-interactive.com> écrit :
>> 
>> As the number of different types of hosts in my configuration
>> grows, I wonder what are the strategies for making bundlesequence
>> and inputs more modular.
>> 
>> I define a class for each type of hosts so, of course, there's
>> the class approach:
>> 
>> body common control
>> {
>>      class1::
>> 
>>        bundlesequence        => { "common" , "specific1"} ;
>>        inputs                => { "common.cf" , "specific1.cf" } ;
>> 
>>      class2::
>> 
>>        bundlesequence        => { "common" , "specific2"} ;
>>        inputs                => { "common.cf" , "specific2.cf" } ;
>> }
>> 
>> But what if a client belongs both to class1 and class2?
>> 
>> My main goal is to avoid redundancies.  The common parts of
>> bundlesequence and inputs can go into an slist, that's fine.
>> 
>> I tried to define another slist variable to handle the specific
>> parts of bundlesequence and inputs.  My idea was to begin vith an
>> empty slist (now that we can use "cf_null") and then add bundles
>> and inputs for each class the client belongs to.  But it's not
>> possible to use the slist as in:
>> 
>> "specific" slist => { @(specific) , "other_stuff" } ;
>> 
>> and I found no way to add elements to an existing slist.
>> 
>> So I'm stuck here with no elegant solution to my problem.
>> 
>> How do people with a non-trivial configuration deal with this?
> 
> Thank you to Daniel V. Klein, Michael Potter and Bas van der
> Vlies for their replies.
> 
> I went for this approach:
> 
> promises.cf:
> -----------------------------------------------------------------
> body common control
> {
>       bundlesequence  =>
>       {
>               @(g.bundlesequence) ,
>       } ;
> 
>       ignore_missing_inputs   => "true" ;
> 
>       inputs  =>
>       {
>               "cfengine_stdlib.cf" ,
>               "common.cf" ,
>               @(g.inputs) ,
>       } ;
> }
> -----------------------------------------------------------------
> 
> common.cf:
> -----------------------------------------------------------------
> bundle common g
> {
> classes:
> 
>       # definition of classes
> 
> vars:
> 
>       dns::
> 
>       "bundlesequence_dns"
>               comment => "bundlesequence for DNS servers" ,
>               slist   =>
>               {
>                       "dns" ,
>               } ;
> 
>       "inputs_dns"
>               comment => "inputs for DNS servers" ,
>               slist   =>
>               {
>                       "dns.cf" ,
>               } ;
> 
>       # add more classes here
> 
>       any::
> 
>       "bundlesequence"
>               comment => "bundlesequence" ,
>               policy  => "ifdefined" ,
>               slist   =>
>               {
>                       "common_bundlesequences" ,
>                       @(bundlesequence_dns) ,
>                       # add more here
>               } ;
> 
>       "inputs"
>               comment => "inputs" ,
>               policy  => "ifdefined" ,
>               slist   =>
>               {
>                       "common_inputs.cf" ,
>                       @(inputs_dns) ,
>                       # add more here
>               } ;
> }
> -----------------------------------------------------------------
> 
> -- 
> Marc Baudoin
> STG Interactive
> _______________________________________________
> 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