The official Ansible installation instructions are WRONG, and will result in a bunch of errors and wasted time troubleshooting. Here’s how to install the newest version of Ansible on Ubuntu or Debian (or any other Linux distro, provided you swap out aptitude for your own package management commands).
Note: This installs the NEWEST ‘stable’ version of Ansible, even if Ubuntu’s package repositories are outdated (which they usually are):
sudo -i
apt-get install pip
pip install --upgrade pip
pip install ansible jinja2 pyaml
Troubleshooting Failed Installs Because You Naiively Followed the Official Instructions
Here are the official installation docs, via https://docs.ansible.com/ansible/latest/intro_installation.html#latest-releases-via-pip
# Not really all you need to do
root@jenkins2:~# pip install ansible
First Error: Ansible doesn’t automatically pull in the required jinja2 module/package
Here’s what this looks like, after you run ‘pip install ansible’ as above:
jenkins@jenkins2:~$ ansible --version
Traceback (most recent call last):
File "/usr/local/bin/ansible", line 40, in <module>
import ansible.constants as C
File "/usr/local/lib/python2.7/dist-packages/ansible/constants.py", line 12, in <module>
from jinja2 import Template
ImportError: No module named jinja2
You get this error because ansible requires the jinja2 module, which isn’t marked as a required package in pip for some reason.
Solution: Install the missing jinja2 module via the jinja2 package in Pip
sudo pip install jinja2
Second Error: Pip doesn’t automatically pull in a yaml package for Ansible
This is the case if you’re getting an error like the following one:
jenkins@jenkins2:~$ ansible --version
Traceback (most recent call last):
File "/usr/local/bin/ansible", line 40, in <module>
import ansible.constants as C
File "/usr/local/lib/python2.7/dist-packages/ansible/constants.py", line 18, in <module>
from ansible.config.manager import ConfigManager, ensure_type, get_ini_config_value
File "/usr/local/lib/python2.7/dist-packages/ansible/config/manager.py", line 11, in <module>
import yaml
Solution: Install the yaml module via the pyaml package in Pip
sudo pip install pyaml
This is a stupidly named package in Pip — it’s easy to get the name wrong, as below. The solution is to just install the ‘pyaml’ package instead.
# ERROR: Install pyaml (it's not called yaml)
root@jenkins2:~# pip install yaml
Collecting yaml
Could not find a version that satisfies the requirement yaml (from versions: )
No matching distribution found for yaml
So if you followed the instructions at the beginning of this post, OR you had to troubleshoot and start in the middle of this post somewhere, you should now have a functioning ansible install. If running ‘ansible –version’ doesn’t print out a version number, it should at least point you to the next error you need to troubleshoot.
Here’s an example from a Jenkins build server:
jenkins@jenkins-server:~$ ansible --version
ansible 2.4.2.0
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/var/lib/jenkins/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/local/lib/python2.7/dist-packages/ansible
executable location = /usr/local/bin/ansible
python version = 2.7.12 (default, Nov 20 2017, 18:23:56) [GCC 5.4.0 20160609]
I hope that helps to guide you through the frustrating path of bad package naming, outdated repositories, and broken tooling that is (seemingly always) the current state of affairs in Ansible-land!
By the way, if you want to learn more about Linux, Programming, and other tech stuff, I’ve got a bunch of free Linux video tutorials up on my YouTube Channel: https://www.youtube.com/c/tutorialinux
Check it out!