意外异常:调用 ansible2 时未定义名称“basestring" [英] Unexpected Exception: name 'basestring' is not defined when invoking ansible2
问题描述
我正在尝试执行 ansible2 commnads...
I'm trying to execute ansible2 commnads...
当我这样做时:
ansible-playbook -vvv -i my/inventory my/playbook.yml
我明白了:
意外异常:名称basestring"未定义完整的回溯是:
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
这是ansible --version
:
ansible 2.0.0.2
config file = /etc/ansible/ansible.cfg
configured module search path = Default w/o overrides
这里是 python --version
Python 3.4.3
推荐答案
Ansible 2.5 以下版本需要控制主机上的 Python 2.6 或 2.7:控制节点要求
Ansible below version 2.5 requires Python 2.6 or 2.7 on the control host: Control Node Requirements
basestring
在 Python 3 中不再可用.来自 Python 3.0 中的新功能:
basestring
is no longer available in Python 3. From What’s New In Python 3.0:
内置的 basestring
抽象类型被移除.使用 str
代替.str
和 bytes
类型没有足够的共同功能来保证共享基类.2to3
工具(见下文)用 str
替换每次出现的 basestring
.
The builtin
basestring
abstract type was removed. Usestr
instead. Thestr
andbytes
types don’t have functionality enough in common to warrant a shared base class. The2to3
tool (see below) replaces every occurrence ofbasestring
withstr
.
所以解决方案是升级 Ansible 或降级 Python.
So the solution is to either upgrade Ansible or downgrade Python.
这篇关于意外异常:调用 ansible2 时未定义名称“basestring"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!