On Jun 2, 2010, at 6:54 PM, Trevor Vaughan wrote:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
I've been following this thread with interest and I think that Donavan
is hitting upon something that I've also been wanting.
However, the way I was looking at it was as a set of atomic,
optionally
blocking, semaphores in a set of parallel threads.
If you look at each puppet client as an individual thread and realize
that you need things to happen cross-client that depend on the state
of
one or more clients, then you've deconstructed this into a classic
parallel programming application (with all the constituent nonsense).
I was toying with the idea of a, for lack of a better term, registry
where you could have your modules place *any* type of data and other
systems would retrieve that data/data sets when necessary.
I would *not* build this into the puppetmaster for scaling reasons but
would instead make it a separate data service perhaps optionally
backed
by a distributed database.
This scenario works both for the OpenLDAP situation below as well as
the
situation where you can't start a service/don't want to apply part
of a
manifest, until something has happened on a different system.
OpenLDAP Example:
Node A -
- Request Lock with data broker
- Obtain lock
Node B -
- Request Lock with data broker
- Sleep or skip on returned block
Node A -
- Obtain RID list
- RID +1
- Register new RID with data broker
- Release Lock
Node B -
- Get notified that lock is available if didn't skip
- Continue with processing ....
It's a complex situation, but I'm not entirely sure how else to do it
without a kludgy web "service" or the like. If you could, perhaps, use
some of the recent NoSQL abstractions then this may be a reasonably
fast
operation.
Of course, not all data would need to be locked, if you're just
reading
data, then there's no need to lock at all. But, in my opinion, this is
fundamentally cross-system parallel programming at its best and I
think
that the existing techniques for dealing with the problem would be
best
suited to the task.
I do see a growing trend in this thread and others that, no matter
what
you choose, someone is going to need something else. Such is the
nature
of the vast array of data that we have to pull from.
For example, Person A with 500 servers will be happy with some GUI
wrapped around YAML. However, Person B with 5000 servers will find the
same solution to be tedious and slow and will want a full-on database.
Hope this helps and doesn't just make the whole thing more
complicated.
This is a lot like what I tried to do with my remote-resource stuff:
http://github.com/reductivelabs/puppet-external-resource
I didn't get much response to it when I wrote it a bit ago, but you
could entirely use it to create locks to do staged turn-ups and turn-
downs.
--
The ships hung in the sky in much the same way that bricks don't.
-- Douglas Adams
---------------------------------------------------------------------
Luke Kanies -|- http://puppetlabs.com -|- +1(615)594-8199
--
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.