I'm always interested in chef/puppet alternatives but I was disappointed to hear the developers who work on Pallet haven't used either. That's not always a bad thing and you can often get a good understanding of library without actually using it, but at one point they characterised working with chef/puppet as "copy/paste" in reference to chef recipes.
In my mind if you want to build a competitive library that will attract users for reasons other than "It uses language x" doing some in depth research of the existing solutions and their shortfalls is probably a good idea.
Pallet was actually born out of frustration using chef to automate a website at my previous startup. The initial versions actually used chef solo, and added jclouds for node provisioning (we actually demo'd this to Opscode, back before Fog was integrated in knife). I am by no means an expert in Chef, but Pallet intentionally makes a very distinct set of design decisions.
For instance, the reference to "copy/paste" you mention, and which is easy to misinterpret. Recipe reuse in chef is very much at the source code level - checkout a recipe and edit it for your specifics. Pallet places much more emphasis on using recipes (or crates as we call them) as library functions, in cleanly versioned packages (jar files). This allows you version your recipes, add them as dependencies to your projects, and cleanly separates the configuration data from the recipe code.
On a perhaps more fundamental level, the push model seems to be much more suited to automating configuration across nodes - eg. getting your haproxy pointing to your web frontends. While this is somewhat possible in Chef, it is left to the user to achieve. In Pallet there is first class support for this sort of cross node configuration. It makes it easy to have mixins, that say ensure a node is monitored, or it's log files collected.
A couple of additional advantages of the push model are that it leaves you free to use API's without having to push credentials for those api's to all your nodes and allows you to use Pallet for command and control.
Finally Chef and Puppet are both great frameworks. Pallet is a library.
Hopefully this outlines some of the differences in approach between Pallet and Chef/Puppet. The use of clojure was certainly not the driving force, and I hope that wasn't the main message that came across.
The authors had previous knowledge of chef. But the aim is not exactly the same. I have used the three, and the fact that pallet is essentially a library helps factor your infrastructure in your application, and thus goes beyond the ability that chef and puppet provides. This become evident when having to express inter-dependencies between spread out pieces of your infrastructure.
Currently this comes with the price of a steeper learning curve, but the benefit is well worth it, as far as I'm concerned.
[+] [-] johnbender|14 years ago|reply
In my mind if you want to build a competitive library that will attract users for reasons other than "It uses language x" doing some in depth research of the existing solutions and their shortfalls is probably a good idea.
[+] [-] hugoduncan|14 years ago|reply
For instance, the reference to "copy/paste" you mention, and which is easy to misinterpret. Recipe reuse in chef is very much at the source code level - checkout a recipe and edit it for your specifics. Pallet places much more emphasis on using recipes (or crates as we call them) as library functions, in cleanly versioned packages (jar files). This allows you version your recipes, add them as dependencies to your projects, and cleanly separates the configuration data from the recipe code.
On a perhaps more fundamental level, the push model seems to be much more suited to automating configuration across nodes - eg. getting your haproxy pointing to your web frontends. While this is somewhat possible in Chef, it is left to the user to achieve. In Pallet there is first class support for this sort of cross node configuration. It makes it easy to have mixins, that say ensure a node is monitored, or it's log files collected.
A couple of additional advantages of the push model are that it leaves you free to use API's without having to push credentials for those api's to all your nodes and allows you to use Pallet for command and control.
Finally Chef and Puppet are both great frameworks. Pallet is a library.
Hopefully this outlines some of the differences in approach between Pallet and Chef/Puppet. The use of clojure was certainly not the driving force, and I hope that wasn't the main message that came across.
[+] [-] pyritschard|14 years ago|reply
Currently this comes with the price of a steeper learning curve, but the benefit is well worth it, as far as I'm concerned.