Ansible的运行时环境变量是什么?

时间:2018-03-30 03:21:44

标签: pip ansible environment-variables python-module

有人可以在什么样的环境中向我解释Ansible的运行情况?我在过去的三个月里一直在使用这个产品,并且发现它在使用它的模块时非常脆弱。

我遇到了python,mysql和其他模块的问题,但是错误无法找到无法加载。我不得不重写完美的例子(甚至来自Ansibles自己的文档),甚至不得不在virtualenv中运行Ansible,以便(例如) python-package 只能识别另一个剧本无法识别它

例如。我正在尝试使用 mysql数据库模块并不断收到如下错误:

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

"msg": "The MySQL-python module is required."

我确实找到了一个解决方案(在经历了几天的努力之后),但是为什么我需要求助于以下方法,我感到茫然:

SOLUTION:

- 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中,但在剧本的运行时间内无法找到。对于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仍然无法安装。

我在工作中交付项目时遇到了巨大的延误,并且会感谢您的解释。我错过了一些明显的东西吗?

1 个答案:

答案 0 :(得分:0)

Ansible本身,就像它编写的python一样,本质上是模块化的,因此在实际需要时只需要依赖,而不是在执行时立即执行。 Ansible Core Runtime的依赖关系链在requirements file中列出,但每个模块都可能添加依赖关系。当模块添加依赖项时,它将被记录为这样,您需要从那里处理它。例如,os_image module for OpenStack需要shade模块,该模块在其文档页面的要求部分中列出。

这将我们带到安装方法,您可以使用本机系统包管理器(例如aptyumdnf,{{1)将Ansible和模块的依赖项安装到系统}},zypperemerge等。或者您可以使用python包管理器pacmanpip之内或之外执行此操作,这样做是为了对用户来说是灵活的,但哪种方法由用户选择。

要记住的另一件事是其中需要安装依赖项,控件主机需要Core运行时要求,但其余的依赖项( <远程主机上需要模块依赖项等。

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

对于您的特定场景,这就是您似乎已经解决的python路径,但我很惊讶您遇到了麻烦,因为通常您可以将内容安装到python global virtualenv并且它&#34;正常工作&#34;通过site-packages或您的发行版本地包管理器。

希望这是有用的信息。

快乐自动化。