2015-04-28 155 views
0

我有Ansible playbook运行CentOS版本5.6(最终)的机器。 我在目标机器上安装了simplejson,模块可以从python解释器导入。 但我的剧本仍然失败,出现以下错误。缺少SimpleJson模块

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

尝试安装'python-simplejson'模块 – itzMEonTV

+0

@itzmeontv我已安装该模块。 python -c“导入simplejson”成功 –

+0

Ansible要求将python-simplejson安装在EL盒子上<6. – itzMEonTV

回答

1

这可能会发生,因为你有两个版本的python:系统python在/usr/bin/python和另一个python在/usr/local/bin/python。如果第一个路径的python> = 2.5或者在其站点包中包含simplejson,那么第一个任务将执行正常。但是,如果您尚未安装用于系统python的simplejson /usr/bin/python(最容易到sudo yum -y install python-simplejson),那么git任务可能会失败。

标准模块总是使用#!/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。

+0

宾果!这个问题解决了.. –