Pip Ansible'是怎么回事;s运行时环境变量?

Pip Ansible'是怎么回事;s运行时环境变量?,pip,ansible,environment-variables,python-module,Pip,Ansible,Environment Variables,Python Module,有人能告诉我Ansible在什么样的环境下运行吗?在过去的三个月里,我一直在使用这个产品,我发现它在使用模块时非常脆弱 我遇到了python、mysql和其他模块的问题,这些模块会抛出错误,无法找到这个或加载那个。我必须重写非常好的示例(即使是从Ansibles自己的文档中),甚至必须在virtualenv中运行Ansible,这样(例如)python包才能被识别,而另一个playbook却无法识别它 比如说。我正在尝试使用mysql db模块,不断出现如下错误: "msg": "Unable

有人能告诉我Ansible在什么样的环境下运行吗?在过去的三个月里,我一直在使用这个产品,我发现它在使用模块时非常脆弱

我遇到了python、mysql和其他模块的问题,这些模块会抛出错误,无法找到这个或加载那个。我必须重写非常好的示例(即使是从Ansibles自己的文档中),甚至必须在virtualenv中运行Ansible,这样(例如)python包才能被识别,而另一个playbook却无法识别它

比如说。我正在尝试使用mysql db模块,不断出现如下错误:

"msg": "Unable to find any of pip2, pip to use.  pip needs to be installed."

"msg": "The MySQL-python module is required."
我确实找到了一个解决方案(经过几天的努力),但对于为什么我需要采用以下方法,我感到目瞪口呆:

解决方案:



我正在本地执行剧本

我在全球安装了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
我还将上述内容安装在我当前运行Ansible的virtualenv中:

(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仍然无法安装


我在工作中交付我的项目时遇到了巨大的延误,如果能给我一个解释,我将不胜感激。我是否遗漏了一些明显的东西?

Ansible本身,就像它是用python编写的一样,本质上是模块化的,因此只在实际需要依赖项时才需要依赖项,而不是在执行时一次就需要依赖项。中概述了Ansible核心运行时的依赖关系链,但是每个模块都可能添加依赖关系。当一个模块添加一个依赖项时,它将被记录下来,您需要从那里处理它。例如,需要在其文档页面的“要求”部分中列出的“着色”模块

这就引出了安装方法,您可以使用本机系统包管理器将Ansible和模块的依赖项安装到系统中,如
apt
yum
dnf
zypper
emerge
pacman
,或者您可以使用python包管理器
pip
virtualenv
中或在
virtualenv
中执行此操作,这样做是为了让用户更灵活,但选择哪种方法取决于用户

另一件需要记住的事情是需要安装依赖项的地方,在控制主机上需要核心运行时要求,但在远程主机上需要其他依赖项(如模块依赖项)

您将在上的角色中看到的一种常见模式是拥有一组任务,这些任务为其余任务安装各种依赖项。我们这样做是为了只安装绝对需要的需求,而不是维护2500多个Ansible模块的依赖链,这些模块随Ansible标准安装在您环境中的每个系统上

对于您的特定场景,这都是关于python路径的问题,您似乎已经解决了这些问题,但我很惊讶您遇到了如此多的麻烦,因为通常您可以将东西安装到python全局
站点包中
,并且它可以通过
pip
或您发行版的本机包管理器“正常工作”

希望这是有用的信息


很高兴实现自动化。

因此,继续我的工作上述解决方案让我克服了这个问题:
-name:Install MySQL dependencies yum:pkg=“{item}}”state=installed with_items:“{{MySQL_dependencies}}”
,但稍后在该块失败:
-name:Create a new database MySQL_db:name:“{{item.value.name}”状态:当前登录\u主机:{{item.value.userhost}}登录\u端口:{mysql\u端口}登录\u用户:{mysql\u root}登录\u密码:{{mysql\u root\u pass}}和{{dict:{databases}}登录\u端口:{mysql\u端口}登录\u用户:{mysqldb设置:创建新数据库]************************************************************************************************************************************失败:[127.0.0.1](项=……,“消息”:“需要MySQL python模块。”}要重试,请使用:--limit@/vagrant/tools/deploy_mysql.retry
Add
-vvv
将失败任务的日志记录到OP中。请不要在注释中写大量未格式化的代码。请将问题包括在内,使其格式良好。可以,很抱歉“编辑”按钮太小,我一直忽略了它。谢谢Adam在这里阅读。感谢您让我了解有关银河角色资源的信息。现在我必须跳过这些问题点,幸运的是它们对我的项目还不是至关重要的。等我有时间的时候,我必须重新访问。谢谢!
- name: Install the Python MySQLB module
  pip: name="{{ item }}"
  extra_args: --index=https://pypi.python.org/pypi/
  with_items: "{{ mysql_dependencies }}"