Ansible helpers

When using Ansible with a dynamic inventory, you can end up typing a lot more:

EC2_INI_PATH=prod.ini ansible -i plugins/inventory/ec2.py -u ec2-user -s "*" -m ping

Unfortunately Ansible doesn't let you pass in a full configuration file at runtime, but I recently stumbled on a workaround for this: a shell script that sets relevant environment variables and then executes your command:

#!/bin/sh

export EC2_INI_PATH="prod.ini"  
export ANSIBLE_HOSTS="plugins/inventory/ec2.py"  
export ANSIBLE_REMOTE_USER="ec2-user"  
#export ANSIBLE_SUDO="yes"

exec "$@"

Save this as an executable script and it can then be used like this:

./my_wrapper ansible "*" --list-hosts
./my_wrapper ansible "*" -a "whoami"

Rather neatly, the exported variables don't stick around after the script - check with env | grep ANSIBLE. You can even create multiple wrappers for different environments:

./staging "*" -s -a "service httpd graceful"
./prod "*" -a "uptime"

The relevant constants for overriding config and parameters can vary a bit from what you'd expect, but you can find them in lib/ansible/constants.py.