Hi all,
External data (that is, data specified outside of Puppet manifests)
seems to keep coming up. This is a relatively long description of
where it seems we are and where we should go from here.
* Internally at Puppet Labs we've been discussing shipping Volcane's
extlookup as part of core.
* Alessandro's presentation caused someone to point out to me
afterward that case statements of this ilk:
case $operatingsytem {
debian: { ... }
redhat: { ... }
}
make a module difficult to extend with support for new operating
system types - you have to modify the module itself in this case.
* External node tools are a source of external data, but they're not
yet terribly good at configuring classes, and there's no reasonable
way for a module to ship external data if you expect all of it from
the node classifier.
It seems to me we've got at least a couple of different needs we can
cleanly characterize:
* Manifests need to be able to look values up from an external data
source, preferably one value at a time
* External data will be used, at the least, for both configuring
classes (e.g., IP addresses and host names) and providing platform
flexibility (e.g., debian vs. Red Hat 5 vs. Red Hat 6)
* We need to be able to ship data with modules so that a given module
can, say, have default data for debian, red hat, and solaris.
* Users need to be able to override data with local values
Things I think are probably required:
* Users should be able to change data search paths
* Users should probably be able to put their external data in a
database, preferably in their external node tool
So, the questions become, what should we do here, and are any of the
solutions we have right now good enough to ship today?
extlookup currently uses CSV for external data, and I don't think most
users will want to use that. At the least, any long-term answer needs
to support something more user-friendly like YAML. It also doesn't
support multiple data sources (e.g., YAML and external node) nor does
it (AFAIK) support data in the module plus a central data directory.
From what I can tell, it's well suited to filling out things like IP
addresses, host names, etc., but not as useful for providing module
portability by filling in different values for different operating
systems or something.
I also don't like the idea of just relying on a function - I'd like a
class to be able to declare that it relies on external data, so that
users know what they can configure in their class.
Fortunately, extlookup is a very short function, so it should be
straightforward to extend it if we decide to do that.
I'm thinking that we should ship something simple for rowlf, but I
think it should avoid CSV (probably using yaml instead) and it should,
at the least, support a global data directly and per-module data
directories. It should also allow multiple files for searching (e.g.,
search $os-$osver.yaml, $os.yaml, and default.yaml) rather than having
all of the values in a single file.
Comments?
--
The trouble with the rat race is that even if you win, you're still a
rat. -- Lily Tomlin
---------------------------------------------------------------------
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.