A Faster Ansible (especially on Cygwin)
winsible is an experimental wrapper for ansible-playbook that enhances its multiprocessing and connection persistence, for platforms where OpenSSH can’t transparently do its own connection pooling (such as EL5 and Cygwin).
And unlike Ansible’s own accelerate or fireball modes, it doesn’t require installing anything on the target computers: you just install it on the machine where you run your playbooks, and use winsible-playbook instead of ansible-playbook.
Installation and Use
Install winsible with pip install winsible or easy_install winsible. If you don’t have these commands on your system, try installing your platform’s python-setuptools package. (Also, if you’re not on Cygwin, you’ll need to be root or use sudo, or install them to a virtualenv.)
If you have a current version of gevent on your system (1.0.1 or better), winsible can use it to eliminate forking altogether and run plays against all hosts with a single process. But this is a relatively small performance boost compared to connection pooling (and is somewhat experimental), so it’s optional and has to be explicitly activated. If you want to try it, you can install gevent with sudo pip install "gevent>=1.0.1" or sudo easy_install "gevent>=1.0.1". (Then enable it with ANSIBLE_PROCESS_MODE=gevent in the environment or process_mode=gevent in your ansible.cfg’s [defaults] section.)
Last, but not least, make sure you’ve got an ssh command: if you’re on Cygwin, install the openssh package, or on Linux distros it might be in an openssh-clients package.
Once you have these things installed, you’re ready to use winsible-playbook in place of ansible-playbook, to enjoy faster playbook runs. (A winsible script is also included, for completeness, but it doesn’t provide much in the way of acceleration. It does, however, tweak ansible’s defaults so that the ssh transport will work correctly on Cygwin.)
Note: At the moment, this project as a whole is still pretty alpha. (Especially the gevent mode.) In general, winsible has not been run on a very wide variety of hosts, modules, or plugins, so experience reports are welcome. If something breaks, or if it doesn’t improve performance in your use case, please file an issue on the github page with some details so I can have a look at it. Thanks!
For more information on how this works and how to configure it, check out the docs at https://github.com/pjeby/winsible/#how-it-works