我正在尝试使用在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
答案 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,它包含其他可能解决方案的答案。