缺少 SimpleJson 模块

Missing SimpleJson Module

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

这可能是因为您有两个版本的 python:系统 python 在 /usr/bin/python 和另一个 python 可能在 /usr/local/bin/python。如果 first-on-path python 是 >=2.5 或者在其站点包中有 simplejson,则第一个任务将执行正常。但是,如果您没有在 /usr/bin/python 为系统 python 安装 simplejson(最简单的是 sudo yum -y install python-simplejson),那么 git 任务可能会失败。

标准ansible模块总是使用#!/usr/bin/python shebang,git module也不例外。

此外,来自 ansible documentation

By default Ansible assumes it can find a /usr/bin/python on your remote system that is a 2.X version of Python, specifically 2.4 or higher.

Setting of an inventory variable ‘ansible_python_interpreter’ on any host will allow Ansible to auto-replace the interpreter used when executing python modules. Thus, you can point to any python you want on the system if /usr/bin/python on your system does not point to a Python 2.X interpreter.