Setup Ansible with Python Virtualenv

If you’re interested in learning config management, or looking to try a new tool, Ansible is a great way to start managing servers.  With any new tool comes the overhead of installing and configuring it.  This article explains a simple way to setup Ansible with Python virtualenv.

The Ansible docs goes over a variety of ways to install Ansible ranging from apt/yum installs to compiling from source.  In my own experience I’ve found that create a virtualenv is the easiest way to work with Ansible, especially when using more than one project.

Ubuntu:

apt install python-virtualenv

CentOS

yum install python-virtualenv

Other

If you’re having trouble installing, maybe try using pip to install virtualenv

pip install pip --upgrade
pip install virtualenv

Using virtualenv to install Ansible

Virtualenv allows you to import Python modules into a project folder, rather than installing them for every user on the system.  Now that you have virtualenv installed, you can create an environment just for Ansible:

cd ~/
virtualenv ansible-2.6.4
source ansible-2.6.4/bin/activate
pip install ansible==2.6.4

That’s the basic setup, you now have access to Ansible! From here you should be able to run ansible –version 

You can exit the environment by running:

deactivate

Now start a new virtualenv with the latest version of Ansible:

cd ~/
virtualenv ansible-latest
source ansible-latest/bin/activate
pip install ansible=2.6.3

Verify which version of Ansible is available:

ansible --version

Upgrade to the latest version of Ansible:

pip install ansible --upgrade

Switching back to a different version of Ansible is simple, just source in a different virtualenv:

deactivate
source ~/ansible-2.6.4

Create a Bash alias for Ansible and virtualenv

Finally, we’ll create an alias under your user account to source in a virtualenv with a more simple command. Edit your .bashrc as follows:

# ~/.bashrc
alias ansenv='source ~/ansible-latest/bin/activate'

Try it out!  you’ll need to source in your .bashrc, or logout/login to pick up the changes:

source ~/.bashrc
ansenv
ansible --version

Virtualenv gives you the convenience of pip without modifying python packages and modules system-wide. It’s like having your Ansible versions in separate containers! This is my preffered way to setup Ansible.  We’ll look into other ways of managing Ansible in the future.