If you ever get an error while trying to provision an Ubuntu server with Ansible, check whether it’s not a case of a mismatched Python interpreter.
Today we wanted to provision one of our Ubuntu servers with Ansible and got an error: `/bin/sh: 1: /usr/bin/python: not found\r\n`
After a quick search it turned out you need to explicitly provide a path to the `python3` interpreter, which is installed by default (instead of the Python 2 version):
[your-server]
ip.ip.ip.ip ansible_user=ubuntu ansible_python_interpreter=/usr/bin/python3
Seems easy, so we did it and retried the playbook. Then we hit another error: `Could not find aptitude. Please ensure it is installed`.
Ubuntu does not come with `aptitude` by default any more (at least on AWS; on Vagrant the playbook ran fine), and it’s used by Ansible (link to the issue on Github). It turned out we can solve this by defining a `pre-task` in the playbook to install it:
pre_tasks:
- name: 'install aplitude'
raw: sudo apt-get install -y aptitude
become: true
become_user: root
become_method: sudo
Today’s Developers’ Notes were prepared by Łukasz, our Web Application Development Team Leader. Stay tuned, because there’s more where this came from!