有人可以在什么样的环境中向我解释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仍然无法安装。
我在工作中交付项目时遇到了巨大的延误,并且会感谢您的解释。我错过了一些明显的东西吗?
答案 0 :(得分:0)
Ansible本身,就像它编写的python一样,本质上是模块化的,因此在实际需要时只需要依赖,而不是在执行时立即执行。 Ansible Core Runtime的依赖关系链在requirements file中列出,但每个模块都可能添加依赖关系。当模块添加依赖项时,它将被记录为这样,您需要从那里处理它。例如,os_image module for OpenStack需要shade
模块,该模块在其文档页面的要求部分中列出。
这将我们带到安装方法,您可以使用本机系统包管理器(例如apt
,yum
,dnf
,{{1)将Ansible和模块的依赖项安装到系统}},zypper
,emerge
等。或者您可以使用python包管理器pacman
在pip
之内或之外执行此操作,这样做是为了对用户来说是灵活的,但哪种方法由用户选择。
要记住的另一件事是其中需要安装依赖项,控件主机需要Core运行时要求,但其余的依赖项( <远程主机上需要模块依赖项等。
您将在Ansible Galaxy上的角色中看到的一种常见模式是拥有一组任务,为其余任务安装各种依赖项。我们这样做是为了只安装绝对需要的需求,而不是维护环境中每个系统上标准安装的Ansible附带的2500+ Ansible模块的依赖链。
对于您的特定场景,这就是您似乎已经解决的python路径,但我很惊讶您遇到了麻烦,因为通常您可以将内容安装到python global virtualenv
并且它&#34;正常工作&#34;通过site-packages
或您的发行版本地包管理器。
希望这是有用的信息。
快乐自动化。