I've recently added a similar functionality to foreman - it allows you to query within puppet (or externally via a script) to get back a list of hosts that answer to a certain criteria.
Currently, one can query for a hosts that belong to a certain class or has a certain fact, e.g. in a template you can do: <% foreman_function("fact=RedHat").each do |host| -%> something will all my redhat machines goes here.. .. <% end -%> Ohad p.s. its not yet in the stable release... http://theforeman.org On Wed, Oct 21, 2009 at 6:34 PM, Sven Mueller <puppet-gro...@incase.de>wrote: > > > > Luke Kanies schrieb: > > On Oct 19, 2009, at 6:19 AM, Bernhard Bock wrote: > > > >> Hi, > >> > >> I'm trying to develop a class that autogenerates a config file based > >> on an .erb template. > >> It shall populate the config file with data exported from various > >> hosts. > >> > >> Some pseudocode to clarify my issue: > >> > >> node n1 { > >> @@mytype { > >> "name": > >> property => "foo" > >> } > >> } > >> > >> template.erb: > >> <% mytype.each do |bar| %> > >> <%= bar.name %> > >> <%= bar.property %> > >> <% end %> > >> > >> My question is: How can I access and iterate through the exported > >> resources in the template? mytype.each will not work... > > > > This is getting into semi-supported internal APIs, but you can get the > > resource list from the catalog, something like this: > > > > compiler.catalog.vertices.each do |resource| > > resource.title > > resource[:property] > > end > > Being semi-supported or not, can I get to this from a template? I tried > with lookupvar('compiler') and lookupvar('compiler.catalog.vertices'), > but lookupvar returns not the variable, but a string. And that is empty > in both cases. Do I need to define my own function to return something > more useful? > Also: how can I check which type the resource has? "resource.type" seems > wrong (as I expect that the ruby Type is not the same as the type)? > > The idea Bernhard had, if I understand it correctly, is to use a custom > type just to store the wanted data (and being a type, not a variable, > many instances can exist and get exported). The data is then collected > by a template. For me, this has two advantages (over other solutions > available to collect data from multiple hosts): > 1) The user can change the template as needed > 2) The resulting file is not edited, but recreated on each run, so its > content is deterministic after the run, even if someone edited it > manually beforehand. > > Regards, > Sven > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Puppet Users" group. To post to this group, send email to puppet-users@googlegroups.com To unsubscribe from this group, send email to puppet-users+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en -~----------~----~----~----~------~----~------~--~---