Puppet: System Administration Automated

Support

The parser has grown up organically, which is normally a good thing, but the time has come for a significant redesign. I have written up a post containing a walk-through of my thoughts on the redesign, but it's not organized very usefully. Hopefully this page will be of more help.

Goals

  • Make element statements return objects, rather than storing them in the current scope
  • Allow addition of code to nodes and classes
  • Add constants
  • Make the parser two-pass, so that variables and includes are set on the first pass, and code is evaluated on the second pass.

Potential Problems

  • Listing components or classes as dependencies
  • Configuration context must be retained, at least enough to provide good logging and reporting
  • What happens when a class has multiple subclasses? What happens if those multiple subclasses override the same object?

Dependencies

Event propagation is currently done in Puppet::Type#propagate. It triggers direct subscriptions, and then passes the event up to the parent if there is one. I'm guessing there are plenty of weirdnesses here, but the thing we have to retain is the ability to have one object subscribe to an entire component, such that all elements of that component happen before the subscribing object, and any events are sent along to the subscribing object.