Ansible - Powerful yet simple Configuration Management software.
In the realm of Configuration Management software for Operating Systems, there are the big players:
- CFEngine - oldest one on the market, rather complicated
- Puppet - Ruby-based, heavyweight, uses its own DSL for configuration
- Chef - also Ruby-based but with a different design
and the more lightweight but also powerful players, both Python-based:
After looking for such software for a long time, I decided not to use any of the big players either because they were too complex or had very heavyweight dependencies (like CouchDB for Chef), I turned to the two smaller players and liked what I found in the first one: Ansible.
The fact that it is Python-based is not too much of an hindrance (I definitely dislike Python a lot!) as most of it is YAML-based configuration and if you need to write a new module, you can even write it in Ruby or
Ansible does not use a resident daemon and needs only ssh connection with Python on the remote system to perform its duties, either through a set of commands (
ansible my-hosts -m ping) or through a playbook, a tree of different YAML files describing hosts, variables and states to achieve through a set of actions.
Salt may be slighty more complete and faster than Ansible (see this article and this one or that one) but I have put some time now in learning Ansible and unless there is something I definitely can not do in Ansible, I do not plan to play really with Salt (you are more than welcome to disagree, I ‘d be happy to discuss it with you :)).
I have also written small playbooks to help me deploy changes to this site and my blog, dealing with the version control software I use, synchronise everything elsewhere (backups) and file copy (both site and blog are using static site generators, resp. nanoc and Octopress).
You can find another example on Ansible usage on this howto on jails on FreeBSD.