I think there are too many SSH loop scripts and message bus style control frameworks out there, which is why I wrote another.
Ansible is heavily inspired by Func, which I co-wrote with Seth Vidal and Adrian Likins. I like Func a lot, and I learned a lot from working on it, but it doesn’t always fit my parameters — namely I end up chasing issues with M2Crypto or SSL, and I am a bit afraid of my implementation of some of the harrier internals.
Goals for this project (which is just starting)?
- Maintain an API centric focus for building applications on top of it
- Be brain dead simple to use, write, and contribute to. Currently the core is under 300 lines of code.
- Require no software to be installed on the remote box for bootstrapping
- Allow plugins to be written in ANY language
- Work off SSH & authorized_keys files
- No new daemons
I think camps are pretty divided about whether folks want an active daemon like funcd and SSL, or something that just caries over existing SSH. I’ll stay out of that battle and let people pick, but I’m rapidly becoming the fan of the “less moving parts” school. I think SSHd is pretty ubiquitous and easy to shoehorn in without a security audit. There are places where either options is better, no doubt.
IMHO, the best part of Func was that it produced an API that was rapidly usable for developing clever applications — not how it actually operated.
Anyway, Ansible requires no additional software to be installed on the remote machine, and ships modules to the remote machine automagically. As I said, modules just speak JSON stdout, so they can be written in any language, even bash. Bootstrapping? It doesn’t exist.
If you are interested, please follow the project on github, where there’s also a lot more documentation. It will be evolving rapidly over the next few weeks.
To whet everyone’s appetite, I also plan to build an extra lightweight declarative CMS on top — probably in JSON and YAML, but using declarative backends. Stay tuned.
Update: Ansible now has a mailing list.