Today has been another day working on puppet. The more I use it the more I find there is functionality I would expect to be present which does not exist, and has a dozen hacked up implementations from different people. Or a dozen plus one, when I then take some of the existing ones and combine them into what I end up using.
Here are some examples: Resources to build a configuration file by assembling snippets defined in lots of different pages. A good way to keep an entire directory tree up to date (the File resource can do this, but it is unacceptable slow compared to rsync). * A way to install perl modules from CPAN.
More generally the language is incredibly weak compared to a "real" programming language. I accept that puppet is about building a declarative model of your system rather than performing instructions, but that is no reason for the language used to build that model not to be powerful. I sometimes find myself wanting to stick a template language on the front to generate puppet configuration files, which is crazy. In particular handling collections is extremely weak.
In short right now I feel the situations where puppet adds the most value are the ones which are so simple you don't really need puppet. But I accept it is early days and with any luck in time PuppetLabs will fix many of these deficiencies.