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
-~----------~----~----~----~------~----~------~--~---

Reply via email to