I am looking at rolling out a new configuration management tool to replace our home-grown solution. The defacto standards are Chef and Puppet, both of which are Ruby-centric (though can be used to deploy non-Ruby environment, obviously). The vast majority of our development is done in Python and our in-house deployment tools make heavy use of Fabric. Therefore I am learning towards Salt since it too is Python, even though it is not as mature as Chef or Puppet. But since I'm not familiar enough with the options, I'm finding it difficult to compare apples-to-apples.
Other than the smaller community, would I be giving up anything signifcant by using Salt rather than Puppet/Chef?
It's been six months since I posted this question. And despite it being closed, it's been viewed over 1,000 times so I thought I'd comment on my experiences.
I eventually decided on Puppet since it had a bigger community. However, it was an immensely frustrating experience, mainly due to the convoluted Puppet configuration syntax. Since I now had a frame of reference to compare the two, I recently took another look at Salt--I'm not going back. It is very, very cool. The things I like best:
Seamless integration of both push and pull configuration models. Puppet uses a pull model (node periodically polls server for updates) and has a sister component called Marionette for pushing changes. Both are important to me and I prefer how Salt works. Salt also executes much faster when you have a lot of nodes.
Configuration syntax uses YAML, which is just a simple text format that uses indentation and bullet points. You can also choose to use other configuration formats via template. This makes Salt about 10x easier to learn and maintain, in my experience.
Python-based. This was the biggest reason I started looking at Salt in the first place. It ended up being one of the more minor reasons I stayed. But if you're a Python shop like us, it makes it easier to develop Salt plugins.