I'll just add, since you didn't put the whole thread in, all of this is
already possible with Foreman query interface today.

Ohad

On Fri, Jun 4, 2010 at 9:45 AM, Daniel Pittman <[email protected]> wrote:

> Luke Kanies <[email protected]> writes:
> > On Jun 2, 2010, at 6:26 PM, Daniel Pittman wrote:
> >> Luke Kanies <[email protected]> writes:
> >>> On May 28, 2010, at 4:46 AM, Daniel Pittman wrote:
> >>>> Luke Kanies <[email protected]> writes:
>
> [...]
>
> >>>> eg: "give me an array of fqdn facts for hosts including
> example::service"
> >>>>
> >>>> I hit that when I run into trying to build multi-system services, for
> >>>> availability or scalability, but questions of this sort are relatively
> >>>> common in the user list too.
> >>>
> >>> This is a pretty different use case, but it's one I'm interested in
> >>> solving, also.  However, I want to make sure it's not just a case of
> 'make
> >>> a database call and stick the results in an array'.  You say you're
> >>> banging your own drum here - do you solve this now?
> >>
> >> Sorry, that was a poor choice of words.  I meant "agitating for a
> solution
> >> to my problem, which is similar-but-not-identical to the one being
> >> discussed."
>
> [...]
>
> > That's a different thing I've been trying to characterise, but like you
> say,
> > it's not quite external data.
>
> *nod*  It is certainly external to the current node, but the backing store
> is
> the information that puppet itself already holds about the target node.
>
>
> > How would you like this interface to work internally?
> >
> > That is, what kinds of things do you need to be able to specify, and how
> > would you like to specify them?
>
> Well, my use case pretty much always comes down to "do something for this
> data
> about this host", and hasn't ever gotten more than two levels deep:
>
>  backuppc::server needs a per-client configuration
>    per-client configuration needs this clients mount-points and excludes
>
>  the load-balancer needs the hostname and ip of every app-server
>
> Let me start with the data I want to get out of it, first:
>
> The simplest version — the 80, or even 90, percent case — is covered by
> "give me an array containing fact X of hosts matching criteria Y and Z"
>
>  eg: ['example1.fqdn', 'example2.fqdn']
>
> Almost everything else is covered by "give me a hash containing facts (or
> maybe puppet variables) X, Y, and Z of hosts matching criteria A, B, and
> C".[1]
>
>  eg: { example1.fqdn => { X => 1, Y => 2, Z => 3 },
>        example2.fqdn => { X => 9, Y => 8, Z => 7 } }
>
> ...or an array of hashes, each hash containing only what facts were
> requested,
> because I can always ask for 'hostname' or 'fqdn' if I need it.
>
>
> In terms of how to express this?  I really don't care that much.  My
> personal
> bias, in language design, is away from syntax[2], so this probably reflects
> that:
>
> All I need is to specify the data I want back, and the hosts to match:
>
>  get_node_facts('hostname', 'tag == "mega" and domain != "all-but-this.com
> "')
>  => ['example1', 'example2']
>
>  get_node_facts(['hostname', 'ipaddress'], 'memory > 2000')
>  => [{ hostname => 'example1', ipaddress => '192.168.1.1' }]
>  # ...or whatever the multiple-value return syntax ends up as. :)
>
> Looking at the existing syntax, it could maybe be something like this:
>
>  $data = [[ hostname, ipaddress | tag == "mega" and memory > 2000 ]]
>
> That preserves something of the flavour of the current "collect" stuff,
> which
> is more or less what this is ... just fetching in data, rather than
> instances
> of types.
>
>
> Does that answer your question?  I can certainly work up a couple of
> real-world use cases for the stuff if you want.
>
>        Daniel
>
> Footnotes:
> [1]  I think.  I suspect that we actually need a bit more work with the
>     simplest version, and hashes in the language, to work out how it best
>     fits together in practice.
>
> [2]  It comes from being an old Lisp user, I guess, since I look at most
>     syntax as papering over the lack of a real ability to walk the AST
> inside
>     the language coherently. :)
>
> --
> ✣ Daniel Pittman            ✉ [email protected]            ☎ +61 401 155
> 707
>               ♽ made with 100 percent post-consumer electrons
>
> --
> You received this message because you are subscribed to the Google Groups
> "Puppet Developers" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected]<puppet-dev%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/puppet-dev?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-dev?hl=en.

Reply via email to