Я пытаюсь создать новую базу данных MySQL с Ansible-контроллером, работающим на Mac OSX. Когда я впервые получил сообщение об ошибке msg: the python mysqldb module is required
, я добавил задачу установить MySQL-python
с pip
. Он был установлен правильно, но тем не менее я все еще получаю сообщение от Ansible, требующего его установки.Необязательные требования к установке MySQL-python, несмотря на то, что он уже установлен
Мой минимальный сборник пьес является:
- 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
Бродячей машины и работал с без проблем (с OSX является контроллером анзибль, единственным отличием является требованиеsudo
вpip
модуле).Я проверил пьесы на второй Mac как локально с
-c local
и удалено через SSH и получил те же ошибку как в оригинальном вопросе (для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
Что вы получаете, если вы вызываете python вручную, а затем выполните следующее? '>>> import MySQLdb' ' >>> print MySQLdb .__ file__' Это должно возвращать путь к тому месту, где установлен модуль. Это проверит, что python правильно находит модуль. –
@BruceP Я получил '/usr/local/lib/python2.7/site-packages/MySQLdb/__ init __. Pyc'. Файл есть, разрешения, похоже, в порядке. – techraf
Как вы установили pip/python? 'which pip' должен дать вам подсказку, я думаю, что MySQL-python должен быть установлен через тот же менеджер пакетов, что и pip. 'brew' был бы диким догадкой (на Ubuntu, он должен быть установлен с apt, как параллель) – tchap