Yeah, I found a post (from you, I think) from a few months back that said as much. Any ideas for more elegant workarounds?
As I said, I've got one, but it's ugly, and I'd like something a bit more elegant and concise. On Sat, Dec 18, 2010 at 02:45:20AM -0500, Seva Gluschenko wrote: >Jesse, > >unfortunately, the Cfengine has limitations when evaluating variables, >so deep nesting should be avoided as far as possible. I'm not the >Cfengine developer to tell for sure whether you met the natural limit >of the evaluation depth, or is it just a bug, but this behaviour >remains pretty the same since 3.0.4. > >2010/12/18 Jesse Becker <becker...@mail.nih.gov>: >> 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 >> > > > >-- >SY, Seva Gluschenko. -- Jesse Becker NHGRI Linux support (Digicon Contractor) _______________________________________________ Help-cfengine mailing list Help-cfengine@cfengine.org https://cfengine.org/mailman/listinfo/help-cfengine