我的Ansible剧本与CentOS 5.6版(最终版)的机器竞争。 我在目标机器上安装了simplejson,模块可以从python解释器导入。 但是仍然我的剧本因以下错误而失败。
Error: ansible requires a json module, none found!
我确认原始模块在运行时存在简单的json模块,如下所示。
---
-
gather_facts: false
hosts: "{{ host_group }}"
name: deploy
vars_files:
- "{{env}}.yml"
tasks:
- name: check python version
raw: python -c "import simplejson"
- name: "git checkout"
git: "repo={{repository}} dest={{base_dir}} version={{branch}}"
第一步成功没有任何问题,如下所示
TASK: [check python version] **************************************************
ok: [my-target-machine] => {"rc": 0, "stderr": "", "stdout": ""}
但是第二个失败了,上面说错了json模块。
答案 0 :(得分:1)
这可能会发生,因为你有两个版本的python:/usr/bin/python
的系统python和/usr/local/bin/python
的另一个python。如果第一个路径python是> = 2.5或者在其site-packages中有simplejson,则第一个任务将执行正常。但是,如果您没有在/usr/bin/python
(最简单到sudo yum -y install python-simplejson
)为系统python安装simplejson,那么git
任务可能会失败。
标准ansible模块总是使用#!/usr/bin/python
shebang,git module也不例外。
另外,来自ansible documentation:
默认情况下,Ansible假设它可以在远程系统上找到/ usr / bin / python,它是Python的2.X版本,特别是2.4或更高版本。
在任何主机上设置库存变量'ansible_python_interpreter'将允许Ansible自动替换执行python模块时使用的解释器。因此,如果系统上的/ usr / bin / python没有指向Python 2.X解释器,则可以指向系统上需要的任何python。