69

我正在尝试执行 ansible2 commnads ...

当我做:

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

我得到:

意外异常:未定义名称“basestring”完整的回溯是:

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
4

5 回答 5

119

Ansible 低于 2.5 版本需要控制主机上的 Python 2.6 或 2.7:控制节点要求

basestring在 Python 3 中不再可用。来自Python 3.0 的新增功能

内置basestring抽象类型已被删除。改为使用strstrbytes类型没有足够的共同功能来保证共享基类。该工具(见下文)用2to3替换每次出现。basestringstr

所以解决方案是升级 Ansible 或降级 Python。

于 2016-01-15T02:51:08.860 回答
23

基本字符串在 Python 3 中不可用。:

这可以通过以下方式为 python 2.x 和 3.x 修复:

try:
  basestring
except NameError:
  basestring = str
于 2018-06-18T11:21:28.733 回答
1

我使用带有 Ansible 的 Python 3 遇到了这个问题,并通过分叉 dopy 项目并在我的 ansible 脚本中安装 dopy 来解决:

name: git+https://github.com/eodgooch/dopy@0.4.0#egg=dopy.

如果您仍然遇到错误,请务必从您的 Python 站点包目录中更改并删除任何挥之不去的 dopy 包version0.4.0

你也可以pip3 install git+https://github.com/eodgooch/dopy@0.4.0#egg=dopy代替你的 Ansible 任务。

于 2019-04-21T16:41:30.263 回答
1

用 str 替换 basestring。在 2.x 中有基本字符串。但在 3.x 中,basestring 已替换为“str”。

于 2019-06-11T11:34:08.090 回答
0

问题可能是由于python版本。在 2.x 中,basestring 是存在的,但在 3.x 中它已被替换为“str”。

于 2019-06-11T11:36:42.243 回答