我试图通过将WordPress实例从构建服务器部署到另一个主机服务器来教授自己。这两个服务器都是Ubuntu 16.04,一切正常,直到构建到达以下错误时构建运行mysql Tasks.yml文件:
"需要Python mysqldb模块"
我在服务器/任务/main.yml文件中包含了Python-Mysqldb,因此不确定错误是什么。谁能向我指向正确的方向?
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
服务器/任务/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主机-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"}
您可以将其安装为per-req:
- 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
我遇到了同样的问题
{" change":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
在我的情况下,这有效。
- apt:
name: "{{ item }}"
state: present
update_cache: True
with_items:
- mysql-server
- python3-pip
- libmysqlclient-dev
- python3-dev
- python3-mysqldb
好吧,让我们考虑一下为什么会发生这种情况。Ubuntu 16.04默认情况下使用Python 3.5.1安装为Python3二进制。Python 2仍然可以安装,但默认不足。
当我们将Ubuntu 16.04与Ansible一起使用时,通常会有一些破裂的更改,因为大多数可搭配模块是由Python 2创建的,并且此错误是由Python的问题引起的,因此修复它的简单方法是在运行前安装Python 2Ansible,让Met展示两种做到这一点的方法。
1-只需安装Python 2,然后运行Ansible
sudo apt-get install -y python
2-例如,如果您使用的是vagrant,请在运行Ansible作为VM Provision之前添加Shell脚本文件,例如:
在vagrantfile中添加此行,然后在Ansible调用之前
config.vm.provision "shell", path: "provision.sh"
使用此简单安装python创建profision.sh:
#!/bin/sh
#
sudo apt-get install -y python
正常运行流浪者,一切都应该效果很好
我希望我能帮助大家