On Jan 19, 2007, at 8:55 AM, Paul Anderson wrote:
I'm sure that I seen several comparatively simple examples in a similar vein (Ed?). I worry about how you get from there to something practical.

I feel similarly.

I completely agree that solutions to this problem should essentially be orthogonal to the problem of actually making the changes (I tend to think it's a layered relationship, but it doesn't really matter). The big problem I see is what the interface between the two sets of solutions is.

For instance, I've been thinking of change control (which is basically what this is) as a layer above configuration management, and then trying to figure out what information needs to pass between the layers. At the least, they need to agree on what services could be running and who could run them (and they should probably support different levels of "can run", from "i could install everything and then run" to "all I need to do is run the startup script)).

I expect it would be the responsibility of the change control layer to maintain the list of what services should run on which nodes, so that the configuration management layer is only responsible for how to manage a given service.

Puppet is already somewhat prepared for this, because the node/class mappings can be pretty easily moved out of it into an external database or something, and then Puppet would just query this information when configuring a node. However, there's no way currently to ask Puppet which nodes are correctly running a current service.

So, as Narayan mentioned, the feedback mechanisms because pretty important and painfully complicated. Just having configured a service isn't sufficient -- the change control layer needs to know whether the service (whether it's a TV tuner or a database service) is running. The only way I can see to do this is to have good feedback systems, which is why I've been planning on making Runnels [1] for more than a year.

How do you specify what you want in a simple and concise way - having someone (sysadmin?) write arbitrary code in a logic programming language and let it lose to reconfigure my network would make me a little twitchy :-) - you still want to allow the flexibility though - perhaps you need to provide some layer which restricts what is possible, and makes the application context clearer - for example "remove server A while maintaining these properties ....."

At this point, we should focus on defining the interaction with this layer and worry about competing tools later. I'd be highly surprised if low-level people would ever interact with this layer, and someone has to make this kind of decision; you might as well give them powerful tools to do so.

It is also hard to specify all the correct constraints in practice - my previous example being migrating some service on to somebody's laptop because there wasn't any constraint to say that this was a bad idea ....

Yeah, constraints become pretty important when making this kind of decision. Following my layers, the config mgmt layer would need a standard way of talking about constraints, and the change control layer would need that information in order to make its decisions.

It seems somewhat reasonable (this is somewhat off the cuff) to think of constraints as simple booleans like the classing/grouping mechanisms, such that membership or lack thereof in a group would be considered a constraint. So, you could constrain your services to ! laptop or to any other class of machine based on location or platform or whatever.

But I really would like to see this approach followed up a little further.

I have zero time right now, but I might be able to initiate a student project to play with it and keep me involved .... (?)

This is something I've been mentally modelling for a while. The latest release of Puppet supports allowing external programs to specify node/class relationships (a very simple output format is required -- the parent node on the first line, whitespace-separated classes on the second), because I could tell that people wanted to make this kind of decision in a tool very different from Puppet.

There are also multiple kinds of mappings. At the least, there are manual and automatic mappings -- classes like hardware, platform, and ip space classes should be automatic (and, of course, location *should* be automatic but basically never is), but classes that determine which service should run where will always look basically manual (even if it's a computer doing the manual setting).

Puppet currently does the automatic mappings using variables, so you'd do something like this:

  include $operatingsystem

to set the appropriate automatic class on a system. This should be more like data, in my opinion, but it requires information from the host, which I'm hesitant to push up to the change control layer.

So, I'm thinking that the configuration management layer should have an automatic class mapping module, such that the interface between the two layers would have the config mgmt layer determining automatic class memberships (which would include things like whether a machine is a laptop, based on hardware type) and passing that to the change control layer to determine the rest of the class memberships.

I'd love to write Puppet to someone else's change control layer. If anyone (Andrew?) is interested in working on this, I'll do whatever I can -- including getting new releases out with this ability -- to work on it, because I know (based on customer feedback) that this is the next big hurdle.

I also have been thinking about using these booleans to handle versioning interfaces. E.g., every class would be mapped to a version control system, such that you could ask for a class and a version (or, more likely, a stability level), and Puppet would know how to retrieve the associated code from the version store. This puts even more power into the hands of these booleans, but I think they work pretty well.

--
The easiest way for your children to learn about money is for you
not to have any.    -- Katharine Whitehorn
---------------------------------------------------------------------
Luke Kanies | http://reductivelabs.com | http://madstop.com


_______________________________________________
lssconf-discuss mailing list
lssconf-discuss@inf.ed.ac.uk
http://lists.inf.ed.ac.uk/mailman/listinfo/lssconf-discuss

Reply via email to