My Pet Puppet Hate - Adding New Types

Now that chef is out and about people that accepted the massive improvement over all the existing host configuration managers that is Puppet will probably be casting a weary eye its way.

I’ve got a little too much in puppet at my current position to look at moving for a while yet but now the competition is rising its time to get my boot in and point out what, for me, is the worst part of puppet; how difficult it is to add new types.

One of the greatest strengths of tools like Nagios and Munin is the community tools provided. Nagios has a decent selection of plugins out of the box but a quick google or check of NagiosExchange shows dozens of additions (including some of my own Nagios Plugins.

With puppet on the other hand once you reach the point where you want to write custom types it all gets very heavy, very quickly. The biggest issue, to me at least, is that the level of abstraction feels wrong. Adding a simple type that will add a line to a config file for example (such as /etc/sysctl.conf) should be an easy task but the lack of documentation and the different approaches taken by the existing types (which seem to have been done at very different times and feel quite different) make it awkward to crib from. If instead there was a simple type where you changed the filename and the separator for example then a lot of custom types become within reach for less ruby skilled users.

On the flip-side my current hope is the Augeas type. It understands a lot of config files, provides consistent access to add and append to them and can be wrapped in defines.