【问题标题】:Error on ansible playbook: the python mysqldb module is requiredansible playbook 上的错误:需要 python mysqldb 模块
【发布时间】:2017-07-15 04:11:54
【问题描述】:

我正在尝试通过将 wordpress 实例从构建服务器部署到另一台主机服务器来自学 ansible。两台服务器都是 Ubuntu 16.04,一切正常,直到构建开始运行 mysql 任务 main.yml 文件,当我收到以下错误时:

“需要python mysqldb模块”

我已将 python-mysqldb 包含在我的 server/tasks/main.yml 文件中,因此不确定错误是什么。谁能指出我正确的方向吗?

mysql/tasks/main.yml

---
# tasks file for mysql
- name: Create mysql database
  mysql_db: name={{ wp_mysql_db }} state=present

- name: Create mysql user
  mysql_user:
    name={{ wp_mysql_user }}
    password={{ wp_mysql_password }}
    priv=*.*:ALL

server/tasks/main.yml

---
# tasks file for server
- name: Update apt cache
  apt: update_cache=yes cache_valid_time=3600
  sudo: yes

- name: Install required software
  apt: name={{ item }} state=present
  sudo: yes
  with_items:
    - apache2
    - python-mysqldb
    - mysql-server
    - mysql-client
    - php7.0
    - php7.0-mysql
    - libapache2-mod-php7.0
    - php7.0-cli
    - php7.0-cgi
    - php7.0-gd
    - php7.0-mcrypt

控制台输出错误:ansible-playbook playbook.yml -i hosts -u jbloggs -K

TASK [mysql : Create mysql database] *******************************************
task path: /etc/ansible/roles/mysql/tasks/main.yml:3
fatal: [wordpress1]: FAILED! => {"changed": false, "failed": true, "msg": "the python mysqldb module is required"}

【问题讨论】:

  • 您的剧本在 Vagrant 的 bento/ubuntu-16.04 框上运行良好,来自 APT 的 python-mysqldb 已被 Ansible 正确识别,因此您的问题一定出在其他地方。您在 Ubuntu 16.04 上使用什么 Python?默认情况下它没有 Python 2,对吗?那你加了吗?还是您尝试使用 Python 3?

标签: python ansible mysql-python ubuntu-16.04


【解决方案1】:

您可以根据需要安装它:

- name: Install required software
  apt: name={{ item }} state=present
  sudo: yes
  with_items:
    - apache2
    - build-essential
    - python-dev
    - libmysqlclient-dev
    - python-mysqldb
    - mysql-server
    - mysql-client
    - php7.0
    - php7.0-mysql
    - libapache2-mod-php7.0
    - php7.0-cli
    - php7.0-cgi
    - php7.0-gd
    - php7.0-mcrypt

如果这不起作用,那么你可以这样做:

- name: Install required software
  apt: name={{ item }} state=present
  sudo: yes
  with_items:
    - apache2
    - build-essential
    - python-dev
    - libmysqlclient-dev
    - python-pip
    - mysql-server
    - mysql-client
    - php7.0
    - php7.0-mysql
    - libapache2-mod-php7.0
    - php7.0-cli
    - php7.0-cgi
    - php7.0-gd
    - php7.0-mcrypt

- name: Install the MySQL-python through pip
  sudo: yes
  pip:
    name: "{{ item }}"
    state: forcereinstall
  with_items:
    - pip
    - MySQL-python

【讨论】:

  • 谢谢。我尝试了第一个选项,但失败并出现相同的错误,然后第二个选项更进一步,但随后失败并出现如下错误:
  • 任务 [服务器:通过 pip 安装 MySQL-python] *************************** --- -------------------------------------\n\n:stderr: Command \"python setup. py egg_info\" failed with error code 1 in /tmp/pip-build-3bpquj_j/MySQL-python/\n您使用的是 pip 版本 8.1.1,但版本 9.0.1 可用。\n您应该考虑通过 'pip安装 --upgrade pip' 命令。\n"}
  • @PhillipHogan 请尝试修改后的答案
  • 我尝试了更新的答案,但现在出现以下错误:
  • 失败:[wordpress1] (item=MySQL-python) => { "cmd": "/usr/local/bin/pip3 install -U --force-reinstall MySQL-python", " failed": true }, "item": "MySQL-python", ImportError: No module named 'ConfigParser'\n \n ---------------------- ------------------\n\n:stderr: 命令 \"python setup.py egg_info\" 失败,错误代码 1 在 /tmp/pip-build-3lsqwtrj/ MySQL-python/\n" }
【解决方案2】:

我遇到了同样的错误问题

{"changed": false, "failed": true, "msg": "需要python mysqldb模块"}

运行这个剧本解决了我的问题。在 vagrant box 上测试ubuntu/precise64

---
- hosts: vagrant1
  gather_facts: no
  tasks:
  - name: "updating server"
    apt:
      update_cache: yes
  - name: "Installing apt dependencies"
    apt:
     name: "{{item}}"
    with_items:
      - python-pip
      - python-dev 
      - libmysqlclient-dev

  - name: "Installing pip dependencies"
    pip:
      name: MySQL-python
      extra_args: --index=https://pypi.python.org/pypi/
      version: 1.2.3

  - name: "Installing  mysql server"
    apt:
      name: mysql-server

  - name: "Creating mysql user"
    mysql_user:
      name: root #your mysql username
      password: root #your mysql password
      priv: '*.*:ALL'
      state: present
...

第 1 步: apt-get install mysql-server python-pip python-dev libmysqlclient-dev

第 2 步pip install --index=https://pypi.python.org/pypi/ MySQL-python==1.2.3

【讨论】:

  • 谢谢 - 我会试一试。你知道我可以让这一切在 Ansible 中运行吗?理想情况下,我希望一切都尽可能自动化。
  • shell 或命令模块将成为您自动化命令行的朋友:docs.ansible.com/ansible/latest/list_of_commands_modules.html。只需根据您的结构创建一个新任务或一个新角色并尝试一下:)
【解决方案3】:

就我而言,这是可行的。

- apt:
    name: "{{ item }}"
    state: present
    update_cache: True
  with_items:
    - mysql-server
    - python3-pip
    - libmysqlclient-dev
    - python3-dev
    - python3-mysqldb

【讨论】:

    【解决方案4】:

    好吧,让我们想想为什么会这样。 Ubuntu 16.04 默认安装 Python 3.5.1 作为 python3 二进制文件。 Python 2 仍然可以安装,但不是默认的。

    当我们将 ubuntu 16.04 与 ansible 一起使用时,通常我们会有一些损坏的更改,因为大多数 ansible 模块是由 Python 2 创建的,而这个错误是由 python 问题引起的,所以修复它的简单方法是在运行之前安装 python 2 ansible,让我们展示两种方法来做到这一点。

    1 - 只需安装 python 2 然后运行 ​​ansible

    sudo apt-get install -y python

    2 - 例如,如果您使用 vagrant,请在运行 ansible 作为 vm 配置之前添加 shell 脚本文件,如下所示:

    在 vagrantfile 中在 ansible 调用之前添加这一行

    config.vm.provision "shell", path: "provision.sh"

    使用这个简单的安装 python 创建 provision.sh:

    #!/bin/sh
    #
    sudo apt-get install -y python
    

    正常运行 vagrant,一切正常

    希望能帮到大家

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 2020-03-29
      • 1970-01-01
      相关资源
      最近更新 更多