Ansible 要求安装 MySQL-python 尽管它已经安装
Ansible demands installing MySQL-python despite it was already installed
我正在尝试在 Mac OSX 上使用 Ansible 控制器 运行ning 创建一个新的 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
显示软件包已正确安装。
我 运行ning Python 2.7.10 和 Ansible 1.9.4 都安装了 homebrew
,因此我不使用 sudo
.
缺少什么?
我根据 ubuntu/trusty64
Vagrant 机器检查了剧本,它与 没问题(OSX 是 Ansible 控制器,唯一的区别是 pip
模块中对 sudo
的要求)。
我在第二个 Mac 上检查了 playbook,在本地使用 -c local
并通过 SSH 远程检查,得到相同的 error在原始问题中(为了 pip
通过 SSH 正常工作,我必须添加 executalbe=/usr/local/Cellar/python/2.7.10_2/bin/pip
否则它会报告 msg: Failed to find required executable pip
)
当运行与-c local -vvvv
时的任务结果:
<localhost> REMOTE_MODULE mysql_db name=test_db state=present
<localhost> EXEC ['/bin/sh', '-c', 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1446497958.1-90296161052037 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1446497958.1-90296161052037 && echo $HOME/.ansible/tmp/ansible-tmp-1446497958.1-90296161052037']
<localhost> PUT /var/folders/nw/2vnhg_gj77v_cyfv0p1vdfj80000gn/T/tmpK3DT_j TO /Users/techraf/.ansible/tmp/ansible-tmp-1446497958.1-90296161052037/mysql_db
<localhost> EXEC ['/bin/sh', '-c', u'LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 /usr/bin/python /Users/techraf/.ansible/tmp/ansible-tmp-1446497958.1-90296161052037/mysql_db; rm -rf /Users/techraf/.ansible/tmp/ansible-tmp-1446497958.1-90296161052037/ >/dev/null 2>&1']
failed: [localhost] => {"failed": true}
msg: the python mysqldb module is required
问题的原因是 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,它包含其他可能解决方案的答案。
我正在尝试在 Mac OSX 上使用 Ansible 控制器 运行ning 创建一个新的 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
显示软件包已正确安装。
我 运行ning Python 2.7.10 和 Ansible 1.9.4 都安装了 homebrew
,因此我不使用 sudo
.
缺少什么?
我根据
ubuntu/trusty64
Vagrant 机器检查了剧本,它与 没问题(OSX 是 Ansible 控制器,唯一的区别是pip
模块中对sudo
的要求)。我在第二个 Mac 上检查了 playbook,在本地使用
-c local
并通过 SSH 远程检查,得到相同的 error在原始问题中(为了pip
通过 SSH 正常工作,我必须添加executalbe=/usr/local/Cellar/python/2.7.10_2/bin/pip
否则它会报告msg: Failed to find required executable pip
)
当运行与-c local -vvvv
时的任务结果:
<localhost> REMOTE_MODULE mysql_db name=test_db state=present
<localhost> EXEC ['/bin/sh', '-c', 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1446497958.1-90296161052037 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1446497958.1-90296161052037 && echo $HOME/.ansible/tmp/ansible-tmp-1446497958.1-90296161052037']
<localhost> PUT /var/folders/nw/2vnhg_gj77v_cyfv0p1vdfj80000gn/T/tmpK3DT_j TO /Users/techraf/.ansible/tmp/ansible-tmp-1446497958.1-90296161052037/mysql_db
<localhost> EXEC ['/bin/sh', '-c', u'LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 /usr/bin/python /Users/techraf/.ansible/tmp/ansible-tmp-1446497958.1-90296161052037/mysql_db; rm -rf /Users/techraf/.ansible/tmp/ansible-tmp-1446497958.1-90296161052037/ >/dev/null 2>&1']
failed: [localhost] => {"failed": true}
msg: the python mysqldb module is required
问题的原因是 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,它包含其他可能解决方案的答案。