Ansible需要安装MySQL-python,尽管它已经安装好了

时间:2015-11-01 03:21:08

标签: macos ansible mysql-python

我正在尝试使用在Mac OSX上运行的Ansible控制器创建一个新的MySQL数据库。当我第一次收到msg: the python mysqldb module is required错误消息时,我添加了一个任务,用MySQL-python安装pip。它已正确安装,但仍然是Ansible要求安装的错误。

我的最小剧本是:

- hosts: all
  tasks:
  - name: Ensure MySQL-python module is installed
    pip:
      name: MySQL-python
      executalbe: /usr/local/Cellar/python/2.7.10_2/bin/pip

  - name: Create test_db MySQL database
    mysql_db:
      name: test_db
      state: present

当我用以下方式运行剧本时:

ansible-playbook -i "localhost," -c local mysql-test.yml

我得到以下结果(第一次运行时第一个任务使用changed):

TASK: [Ensure MySQL-python module is installed] **************************************
ok: [localhost]

TASK: [Create test_db MySQL database] *********************************************
failed: [localhost] => {"failed": true}
msg: the python mysqldb module is required

pip show MySQL-python显示包已正确安装。

我运行的Python 2.7.10和Ansible 1.9.4都安装了homebrew,因此我不使用sudo

缺少什么?

  • 我针对ubuntu/trusty64 Vagrant机器检查了剧本,它与没问题一起使用(OSX是Ansible控制器,唯一的区别是{{1}的要求在sudo模块中)。

  • 我使用pip在本地检查了第二台Mac上的剧本,并通过SSH远程检查了该剧本,并获得与原始问题相同的错误(对于-c local来说通过SSH正常工作我必须添加pip,否则报告executalbe=/usr/local/Cellar/python/2.7.10_2/bin/pip

使用msg: Failed to find required executable pip运行任务的结果:

-c local -vvvv

1 个答案:

答案 0 :(得分:10)

问题的原因是Ansible使用了默认的OSX的Python(/usr/bin/python),当使用-vvvv选项运行时,它在结果中可见。

第一个任务成功,因为默认OSX的Python称为Homebrew的pip可执行文件,并为Homebrew的Python安装了MySQL-python模块。

第二个任务失败,因为它再次运行默认OSX的Python,需要MySQL-python,但该版本没有安装该模块。

解决方案是使用该选项指定Ansible使用的Python解释器的路径:

ansible-playbook -i "localhost," -c local --extra-vars "ansible_python_interpreter=/usr/local/bin/python" mysql-test.yml

或将ansible_python_interpreter=/usr/local/bin/python添加到广告资源文件中。

同样的问题是mentioned,它包含其他可能解决方案的答案。