【发布时间】:2018-09-09 02:42:33
【问题描述】:
有人可以向我解释 Ansible 在什么样的环境中运行吗?在过去的三个月里,我一直在使用这个产品,并且发现它在使用它的模块时非常脆弱。
我遇到了 python、mysql 和其他模块吐出错误的问题找不到这个或无法加载那个。我必须重写非常好的示例(甚至来自 Ansibles 自己的文档),甚至不得不在 virtualenv 中运行 Ansible,以便(例如)python-package 只会被识别,而另一个 playbook 无法识别它。
例如。我正在尝试使用 mysql db modules 并不断收到以下错误:
"msg": "Unable to find any of pip2, pip to use. pip needs to be installed."
"msg": "The MySQL-python module is required."
我确实找到了解决方案(经过几天的努力),但对于为什么我需要诉诸以下方法感到目瞪口呆:
解决方案:
- name: Execute task with extended PATH
shell: echo $PATH
environment:
PATH: "/home/vagrant/venv/bin:{{ ansible_env.PATH }}"
我正在本地执行剧本。
我已经全局安装了 pip 和 mysql-python:
$ pip --version
pip 9.0.1 from /usr/local/lib/python2.7/site-packages (python 2.7)
[vagrant@controller bin]$ pip show mysql-python
You are using pip version 9.0.1, however version 9.0.3 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
[vagrant@controller bin]$ pip show python
Name: Python
Version: 2.7.4
Summary: A high-level object-oriented programming language
Home-page: http://www.python.org/2.7
Author: Guido van Rossum and the Python community
Author-email: python-dev@python.org
License: PSF license
Location: /usr/local/lib/python2.7/lib-dynload
Requires:
You are using pip version 9.0.1, however version 9.0.3 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
[vagrant@controller bin]$ rpm -qa MySQL-python
MySQL-python-1.2.5-1.x86_64
[vagrant@controller bin]$ python27 --version
Python 2.7.4
[vagrant@controller ~]$ which python27
/usr/local/bin/python27
我还在我的 virtualenv 中安装了上述内容,我目前正在从那里运行 Ansible:
(venv) [vagrant@controller ~]$ pip --version
pip 9.0.3 from /home/vagrant/venv/lib/python2.7/site-packages (python 2.7)
(venv) [vagrant@controller ~]$ python --version
Python 2.7.4
(venv) [vagrant@controller ~]$ which python
~/venv/bin/python
(venv) [vagrant@controller ~]$ pip show mysql-python
Name: MySQL-python
Version: 1.2.5
Summary: Python interface to MySQL
Home-page: https://github.com/farcepest/MySQLdb1
Author: Andy Dustman
Author-email: farcepest@gmail.com
License: GPL
Location: /home/vagrant/venv/lib/python2.7/site-packages
Requires:
我还在命令行以及本地库存文件中指定了解释器和环境变量:
[all:vars]
deploy_env=local ansible_python_interpreter=/home/vagrant/venv/bin/python2.7
$ansible-playbook -i inventory/local deploy_mysql.yml --diff -e "ansible_python_interpreter=/home/vagrant/venv/bin/python2.7"
所有必需的包都安装在全局或 virtualenv 中,但在 playbook 运行时无法找到。对于 pip,我能够像这样安装软件包来克服错误:
- name: Install the Python MySQLB module
pip: name="{{ item }}"
extra_args: --index=https://pypi.python.org/pypi/
with_items: "{{ mysql_dependencies }}"
但是安装在哪里?如前所述,我已经将它安装在全局和 virtualenv 中。虽然 pip 好像安装了 mysql-python 还是无法安装。
我在工作中交付我的项目时遇到了巨大的延误,希望能得到解释。我错过了什么明显的东西吗?
【问题讨论】:
-
所以继续我的工作,上面提到的解决方案让我通过了这个:
- name: Install MySQL dependencies yum: pkg="{{ item }}" state=installed with_items: "{{ mysql_dependencies }}",但后来在这个块失败了:- name: Create a new database mysql_db: name: "{{ item.value.name }}" state: present login_host: "{{ item.value.userhost }}" login_port: "{{ mysql_port }}" login_user: "{{ mysql_root }}" login_password: "{{ mysql_root_pass }}" with_dict: "{{ databases }}" -
出现此错误:
TASK [mysqldb-setup : Create a new database] ***************************************************************************** failed: [127.0.0.1] (item=........., "msg": "The MySQL-python module is required."} to retry, use: --limit @/vagrant/tools/deploy_mysql.retry -
将失败任务的
-vvv日志添加到OP。 -
请不要在 cmets 中写一大堆未格式化的代码。请edit 包含它们的问题,以便它们的格式很好。
-
会的,很抱歉“编辑”按钮太小了,我一直忽略它。
标签: pip ansible environment-variables python-module