Python not found in Ubuntu 16.04 server

8,543 views
Skip to first unread message

Peter Loron

unread,
Apr 24, 2016, 3:00:56 PM4/24/16
to Ansible Project
I'm trying to provision a Ubuntu 16.04 server machine. When running a playbook which has worked fine on Ubuntu 14.x and 15.x, it fails with this error:

TASK [setup] *******************************************************************
fatal: [foo]: FAILED! => {"changed": false, "failed": true, "module_stderr": "", "module_stdout": "/bin/sh: 1: /usr/bin/python: not found\r\n", "msg": "MODULE FAILURE", "parsed": false}


Ubuntu 16.04 has python3, not 2.7.x. Why is this not being autodetected?

Andreas Olsson

unread,
Apr 24, 2016, 3:38:14 PM4/24/16
to ansible...@googlegroups.com
On sön, 2016-04-24 at 12:00 -0700, Peter Loron wrote:
> I'm trying to provision a Ubuntu 16.04 server machine. When running
> a playbook which has worked fine on Ubuntu 14.x and 15.x, it fails
> with this error:
> ...
> Ubuntu 16.04 has python3, not 2.7.x. Why is this not being
> autodetected?

No Ansible support for Python 3 just yet.

https://docs.ansible.com/ansible/faq.html#how-do-i-handle-python-pathing-not-having-a-python-2-x-in-usr-bin-python-on-a-remote-machine

For Ubuntu 16.04 I use the following play to get Python 2.7 installed.

- hosts: xenials
  gather_facts: False
  tasks:
     - name: apt-get update
       raw: apt-get update -qq
     - name: Install python 2.7
       raw: apt-get install -qq python2.7

That provides an /usr/bin/python2.7, which I explicitly point to in my
inventory file.

[xenials:vars]
ansible_python_interpreter=/usr/bin/python2.7

Do note that there is nothing special about the name xenials. It's just
a group I have defined in my inventory.

// Andreas

Peter Loron

unread,
Apr 25, 2016, 1:33:51 AM4/25/16
to Ansible Project
You can't see it, but this is me banging my face into my desk. No support for Python 3? It's been out how long?

Sigh. The principal reason I prefer to use Ansible over Chef is that I DON'T need to install anything on the client to make it go. This release of Ubuntu is going to be everywhere shortly. Maybe Canonical dropping Python 2 from the distro is the wrong thing to have done, but that die is cast...

Aapo Rista

unread,
Apr 26, 2016, 12:31:38 PM4/26/16
to Ansible Project
I just want to confirm, that I got this working with Andreas' instructions.

I just added these lines to my inventory file:

[xenials]  # Ubuntu 16.04 hosts without python2
myhost.example.org       ansible_user=root

[xenials:vars] 
ansible_python_interpreter=/usr/bin/python2.7 

[server]  # This already existed 
myhost.example.org       ansible_user=root

And these to my init.yml:

- hosts: xenials 
  gather_facts: False 
  tasks: 
    - name: apt-get update 
      raw: apt-get update -qq 
    - name: Install python 2.7 
      raw: apt-get install -qq python2.7 

Thanks Andreas!

-- 
Aapo

Matt Davis

unread,
Apr 26, 2016, 7:59:27 PM4/26/16
to Ansible Project
It's coming, but there are a *lot* of hoops to jump to make Py3 work while continuing to support back to Python 2.4 in modules (eg, RHEL5 support). It sounds like RHEL will likely do the same for RHEL8, and others too... Life would be much easier if we could just say, Py2.6/2.7/3.4+, but we'd have at least as much hollering from the crowd that's still supporting RHEL5 and other "legacy" distros.

We're definitely not ignoring the problem- a lot of groundwork was laid for Py3 compat in 2.1 (on both control and module side), and it'll likely be a major theme of 2.2.

-Matt

codfather

unread,
May 11, 2016, 6:28:37 AM5/11/16
to Ansible Project
Andreas, when I implemented this, I had to put a line in the section to use sudo for the installation, which makes sense, just wondering if you had achieved that another way , just curious.

I initially did these manually for testing, but this is obviously a much better solution for large scale roll outs, without having to update the AMI first.

Thanks for the post.

Cheers

Nick

Andreas Olsson

unread,
May 16, 2016, 7:04:46 AM5/16/16
to ansible...@googlegroups.com
On ons, 2016-05-11 at 03:28 -0700, codfather wrote:
> Andreas, when I implemented this, I had to put a line in the section
> to use  sudo for the installation, which makes sense, just wondering
> if you had achieved that another way , just curious.

Yepp, I have the following in my ansible.cfg

  [privilege_escalation]
  become      = True

(Where sudo is the default become_method)

> Thanks for the post.

Glad it helped!

// Andreas
Reply all
Reply to author
Forward
0 new messages