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?


-- 
Jesse Becker
NHGRI Linux support (Digicon Contractor)
_______________________________________________
Help-cfengine mailing list
Help-cfengine@cfengine.org
https://cfengine.org/mailman/listinfo/help-cfengine

Reply via email to