- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用以下 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 模块。
提前致谢,如果这里有任何遗漏的信息,请告诉我。
添加任务
- 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/
例如,我有一个父类Author: class Author { String name static hasMany = [ fiction: Book,
代码如下: dojo.query(subNav.navClass).forEach(function(node, index, arr){ if(dojo.style(node, 'd
我有一个带有 Id 和姓名的学生表和一个带有 Id 和 friend Id 的 Friends 表。我想加入这两个表并找到学生的 friend 。 例如,Ashley 的 friend 是 Saman
我通过互联网浏览,但仍未找到问题的答案。应该很容易: class Parent { String name Child child } 当我有一个 child 对象时,如何获得它的 paren
我正在尝试创建一个以 Firebase 作为我的后端的社交应用。现在我正面临如何(在哪里?)找到 friend 功能的问题。 我有每个用户的邮件地址。 我可以访问用户的电话也预订。 在传统的后端中,我
我主要想澄清以下几点: 1。有人告诉我,在 iOS 5 及以下版本中,如果您使用 Game Center 设置多人游戏,则“查找 Facebook 好友”(如与好友争夺战)的功能不是内置的,因此您需要
关于redis docker镜像ENTRYPOINT脚本 docker-entrypoint.sh : #!/bin/sh set -e # first arg is `-f` or `--some-
我是一名优秀的程序员,十分优秀!