缺少SimpleJson模块

时间:2015-04-28 06:59:48

标签: python ansible ansible-playbook

我的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模块。

1 个答案:

答案 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。