gpt4 book ai didi

python - 使用 Ansible 进行 Vagrant 配置 - mysql_db 找不到 PyMySQL

转载 作者:行者123 更新时间:2023-11-28 18:04:38 25 4
gpt4 key购买 nike

我正在使用以下 vagrantfile 启动一个 vagrant 虚拟机:

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
config.vm.box = "centos/7"

config.vm.network "private_network", ip: "192.168.1.15",
virtualbox__intnet: true

# provision with ansible playbook
config.vm.provision "ansible_local" do |ansible|
ansible.playbook = "provisioning/playbook.yml"
end
end

provisioning/playbook.yml 看起来像:

---
- name: Set up the things and stuff
hosts: all
become: true

tasks:
- name: Update Yum
yum:
name: "*"
state: latest

- name: install yum utils
yum:
name: yum-utils
state: present

- name: install development tools
yum:
name: "@Development tools"
state: present

- name: install ius release
yum:
name: https://centos7.iuscommunity.org/ius-release.rpm
state: present

- name: install python36
yum:
name: python36u
state: present

- name: install pip36
yum:
name: python36u-pip
state: latest

- name: upgrade pip36 to latest version
pip:
name: pip
extra_args: --upgrade
executable: pip3.6

- name: install pymysql for python3 (for app connection to mysql)
pip:
name: pymysql
executable: pip3.6

- name: Install MYSQL server
yum:
name: mariadb-server
state: latest

- name: start mariadb-server and enable it on reboot
service:
name: mariadb
state: started
enabled: true

- name: copy database dump file to server
copy:
src: files/db_restore_file.sql
dest: /tmp

- name: create database and tables
mysql_db:
state: import
name: all
target: /tmp/db_restore_file.sql

当我运行 vagrant up 时,一切看起来都很好,直到它到达 mysql_db 行,我收到以下错误消息:

fatal: [default]: FAILED! => {"changed": false, "msg": "The PyMySQL (Python 2.7 and Python 3.X) or MySQL-python (Python 2.X) module is required."} to retry, use: --limit @/vagrant/provisioning/playbook.retry

好的....所以我vagrant ssh进入虚拟机来检查事情。进入一个python3.6的session让我成功导入pymysql:

[vagrant@localhost ~]$ python3.6
Python 3.6.7 (default, Dec 5 2018, 15:02:05)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pymysql
>>>

并且(为了这篇文章的完整性)当然没有用于 python 2 的 pymysql 模块(正如预期的那样......我没有安装一个......):

[vagrant@localhost ~]$ python
Python 2.7.5 (default, Oct 30 2018, 23:45:53)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pymysql
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named pymysql
>>>

这是怎么回事?在这种情况下,我是否需要告诉 Ansible(或 Vagrant)显式使用 python3.6?如果是这样,这样做的首选方式是什么?我不想在该虚拟机上安装任何 python2.x 模块。

提前致谢,如果这里有任何遗漏的信息,请告诉我。

编辑#1

添加任务

  - name: Set ansible python interpreter to python3.6
set_fact:
ansible_python_interpreter: python3.6

告诉 VM 上的 Ansible 显式使用 python3.6。如果您在任务“将数据库转储文件复制到服务器”之前添加此内容,您将收到:

TASK [copy database dump file to server] *************************************** fatal: [default]: FAILED! => {"changed": false, "checksum": "...omitted_checksum...", "msg": "Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!"} to retry, use: --limit @/vagrant/provisioning/playbook.retry

并且由于我似乎无法找到一种干净的方法来使用 Ansible 为 python3.6 安装 libselinux-python,我只是在文件复制之后和“创建数据库和表”任务之前添加 set_fact 任务......似乎工作,但感觉像那样切换 python 解释器很脏。

最佳答案

Ansible 将使用默认的 Python 安装,除非您告诉它不这样做,因此由于您没有在 Python 2 下安装必要的模块,该模块将失败。

Ansible 提供了一个 ansible_python_interpreter 参数,它采用 Python 二进制文件的完整路径,可以告诉 Ansible 使用 Python 的替代版本。您可以在不同的地方设置它。通常,这是通过为需要使用 Python 3 的主机创建一个组来在 list 中完成的:

 [python3_hosts]
some_host
another_host

[python3_hosts:vars]
ansible_python_interpreter = /path/to/alt/python

但它也可以在 ansible.cfg 中设置,剧本的“vars”部分,甚至可能在单个任务的“vars”部分中设置(免责声明:未尝试过。)

关于python - 使用 Ansible 进行 Vagrant 配置 - mysql_db 找不到 PyMySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54189687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com