我试图执行ansible2 commnads ...
当我这样做时:
ansible-playbook -vvv -i my/inventory my/playbook.yml
我明白了:
意外异常:name' 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
答案 0 :(得分:69)
低于2.5版的Ansible在控制主机上需要Python 2.6或2.7:Control Machine Requirements
Python中不再提供 <script>
function favAnimal() {
document.getElementById("animal").innerHTML = "cat";
}
</script>
<h1 id="animal">Favourite Animal Placeholder</h1>
<script>favAnimal()</script>
。来自What’s New In Python 3.0:
已删除内置
basestring
抽象类型。请改用basestring
。str
和str
类型没有足够的功能来保证共享基类。bytes
工具(见下文)将所有2to3
替换为basestring
。
答案 1 :(得分:12)
basetring在Python 3中不可用。:
对于python 2.x和3.x,可以使用以下方法修复此问题:
try:
basestring
except NameError:
basestring = str
答案 2 :(得分:0)
我在Ansible中使用Python 3遇到了这个问题,并通过派生dopy项目并在ansible脚本中安装dopy来解决此问题:
name: git+https://github.com/eodgooch/dopy@0.4.0#egg=dopy
。
如果仍然出现错误,请确保将version
更改为0.4.0
,并从Python site-packages目录中删除所有残留的dopy软件包。
您也可以pip3 install git+https://github.com/eodgooch/dopy@0.4.0#egg=dopy
而不是在Ansible任务中。
答案 3 :(得分:0)
用str替换基字符串。在2.x中存在basestring。但在3.x版本中,基本字符串已替换为“ str”。
答案 4 :(得分:0)
问题可能是由于python版本引起的。在2.x中,basestring存在,但在3.x中,它已被替换为“ str”。