The machines being managed require no special dependencies to be installed. As long as they have bash and ssh running, they can be used with pallet. For me this was important - it means that you can use pretty much any image out there, which is great for ad-hoc testing and development.
Pallet has no central server to set up and maintain - it simply runs on demand. You can run it from anywhere, even over a remote REPL connection.
Everything in Version Control
In pallet, all your configuration is handled in SCM controlled files - there is no database involved. This means that your configuration can always be kept in step with the development of your crates, and the versions of the external crates that you use.
Jar File Distribution of Crates
Custom crates can be distributed as jar files, and so can be published in maven repositories, and be consumed in a version controlled manner. Hopefully this will promote shared crates.
Provisioning, Configuration and Administration
Pallet aims quite wide. You can use it for starting and stopping nodes, for configuring nodes, deploying projects and also for running administration tasks. To be honest, this wasn't an initial design goal, but has come out of the wash that way.
How it works
Pallet is written in Clojure, and so runs in a JVM. You can embed it in any JVM based project, or use it directly at the REPL.
To execute actions on the nodes, pallet executes shell scripts. These
scripts are generated in
clojure. At the lowest level, Pallet
embeds shell script in
clojure, and wraps
shell script fragments into
clojure functions, creating reusable
Of course, no two operating systems are identical, so Pallet allows dispatching of the functions based on packager, etc, enabling abstraction of a node's operating system.
Higher level crates are then put together, that use the resources to install packages, etc. Crates can also be implemented using the same machinery as resource functions.
Node types are defined that specify a tag
and the sequence of crates to apply for each of a number of phases. By
default, pallet defines
configure phases, but you
can add as many phases as you like (e.g.