2015-11-01 2 views
4

Я пытаюсь создать новую базу данных 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 
+1

Что вы получаете, если вы вызываете python вручную, а затем выполните следующее? '>>> import MySQLdb' ' >>> print MySQLdb .__ file__' Это должно возвращать путь к тому месту, где установлен модуль. Это проверит, что python правильно находит модуль. –

+0

@BruceP Я получил '/usr/local/lib/python2.7/site-packages/MySQLdb/__ init __. Pyc'. Файл есть, разрешения, похоже, в порядке. – techraf

+0

Как вы установили pip/python? 'which pip' должен дать вам подсказку, я думаю, что MySQL-python должен быть установлен через тот же менеджер пакетов, что и pip. 'brew' был бы диким догадкой (на Ubuntu, он должен быть установлен с apt, как параллель) – tchap

ответ

9

Причиной проблемы было то, что Ansible использовал Python по умолчанию OSX (/usr/bin/python), который отображается в результатах при запуске с опцией -vvvv.

Первой задачей было выполнение, поскольку по умолчанию для Python по умолчанию использовался исполняемый файл HomeBrew от HomeBrew и установил модуль MySQL-python для Python Homebrew.

Вторая задача не удалась из-за того, что она снова запускала по умолчанию OSX Python, которая требовала MySQL-python, но модуль не был установлен для этой версии.

Решение было использовать опцию, чтобы указать путь к интерпретатору 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, она содержит ответы с другими возможными решениями.