Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unexpected Exception: name 'basestring' is not defined when invoking ansible2

I'm trying to execute ansible2 commnads...

When I do:

ansible-playbook -vvv -i my/inventory my/playbook.yml 

I get:

Unexpected Exception: name 'basestring' is not defined the full traceback was:

Traceback (most recent call last):   File "/usr/local/bin/ansible-playbook", line 85, in <module>     sys.exit(cli.run())   File "/usr/local/lib/python3.4/site-packages/ansible/cli/playbook.py", line 150, in run     results = pbex.run()   File "/usr/local/lib/python3.4/site-packages/ansible/executor/playbook_executor.py", line 87, in run     self._tqm.load_callbacks()   File "/usr/local/lib/python3.4/site-packages/ansible/executor/task_queue_manager.py", line 149, in load_callbacks     elif isinstance(self._stdout_callback, basestring): NameError: name 'basestring' is not defined 

Here is ansible --version:

ansible 2.0.0.2   config file = /etc/ansible/ansible.cfg   configured module search path = Default w/o overrides 

And here is python --version

Python 3.4.3 
like image 608
code_monk Avatar asked Jan 15 '16 02:01

code_monk


1 Answers

Ansible below version 2.5 requires Python 2.6 or 2.7 on the control host: Control Node Requirements

basestring is no longer available in Python 3. From What’s New In Python 3.0:

The builtin basestring abstract type was removed. Use str instead. The str and bytes types don’t have functionality enough in common to warrant a shared base class. The 2to3 tool (see below) replaces every occurrence of basestring with str.

So the solution is to either upgrade Ansible or downgrade Python.

like image 182
udondan Avatar answered Sep 20 '22 01:09

udondan