Mark,

that's what I've pointed out stating that the example can be easily
simplified, and I'd prefer to use classes rather than arrays for
simplicity. There are other applications though where classes won't
work, so thank you for gaining your attention to that and applying a
fix.

2010/12/18 Mark Burgess <mark.burg...@iu.hio.no>:
>
> Jesse and Seva,
>
> thank you for pointing out this problem. It was a simple typo (actually
> failure to substitute some old code for new) that resulted in this
> deficiency. Of course this should work. Latest SVN fixes this bug.
>
> BTW - note that the classes alpha,beta etc are somewhat redundant in
> your example, since the real selection is made by $sys.uqhost
>
> M
>
> On 12/18/2010 12:37 AM, Jesse Becker wrote:
>> So, the snipped below does not work, but I wish that it did.  It also
>> isn't limited to package promises either, I can think of cases for file
>> and command promises as well.
>>
>> At a high level, I am trying to define per-host lists, then iterate over
>> those lists, but only on the appropriate host.
>>
>> <-----snip----->
>>
>> bundle agent testing {
>>
>> vars:
>>      any::   'common'      slist => { 'foo', 'quux', 'fubar' };
>>      alpha:: 'pkgs[alpha]' slist => { 'foo', 'bar', 'baz' };
>>      beta::  'pkgs[beta]'  slist => { @{common}, 'yipyip' };
>>      delta:: 'pkgs[delta]' slist => {  'yipyip' };
>>
>> packages:
>>
>>      # only "NY" is needed, since the others are squished into this in
>>      # yum.cf
>>      centos.!NY::
>>          "${pkgs[${sys.uqhost}]}"
>>              handle         => "per_host_packages_for_${sys.uqhost}",
>>              package_policy => 'add',
>>              package_method => yum,
>>              ifvarclass     => isvariable("pkgs[${sys.uqhost}]"),
>>              package_architectures => { 'x86_64' };
>> }
>>
>> <-----snip----->
>>
>>
>> What happens is that "${pkgs[${sys.uqhost}]}" is evaluated once, with
>> only "${sys.uqhost}" getting processed, leaving the string as a literal
>> "${pkgs[alpha]}" ).  This will, of course, fail when passed to the
>> actual promise in question.
>>
>> I do have a workaround, but it's inelegant.  Bascially, flatten the
>> array into multiple slists, and have a separate promise for each one,
>> based on the hostnames.
>>
>> So my question:  Is there a concise way to do something like what I've
>> posted above?
>>
>>
> _______________________________________________
> Help-cfengine mailing list
> Help-cfengine@cfengine.org
> https://cfengine.org/mailman/listinfo/help-cfengine
>



-- 
SY, Seva Gluschenko.
_______________________________________________
Help-cfengine mailing list
Help-cfengine@cfengine.org
https://cfengine.org/mailman/listinfo/help-cfengine

Reply via email to