我已经开发了一个自定义的ansible模块,它依赖于第三方的库PyYAML。然而,运行攻略会产生以下结果
ansible_module_my_module.py, line 5, in <module>
import yaml
ImportError: No module named yaml我在ansible requirements.txt (https://github.com/ansible/ansible/blob/stable-2.8/requirements.txt)中看到PyYAML,因此我知道它在主机上安装/使用。我想知道有没有推荐的方法在远程机器上安装它?
我可以使用pip ansible模块在攻略中添加一个步骤,将其安装到遥控器上。就像这样
- hosts: all
tasks:
- name: Installing PyYAML python library using Ansible pip module
pip:
name: PyYAML但这意味着攻略知道关于深入堆栈的模块的实现细节,这似乎是错误的。我的期望是,有某种方法可以告诉ansible将第三方库作为其安装的一部分安装到远程机器上。例如,在我的模块中添加一个requirements.txt,ansible会将它附加到它的设置中,但我似乎找不到一个优雅的方法来做到这一点。任何帮助都是非常感谢的。
发布于 2019-06-19 21:20:59
首先,ansible检测依赖项并自动安装,这违背了他们在主机上尽可能少安装的理念。为了解决这个问题,我最终将我的自定义模块包装在一个角色中,并将变量传递给该角色,而不是直接传递给模块。因此,用户设置角色变量,并在将其包含在requirements.yml中后使用include_role和tasks_from调用它。然后,在调用自定义模块的任务之前,我使用pip模块(https://docs.ansible.com/ansible/latest/modules/pip_module.html)将环境设置为角色中的任务。
我面临的第二个问题是,即使通过虚拟环境执行,ansible也会默认使用/usr/bin/python。这显然是设计好的行为。为了解决这个问题,我必须包含ansible_python_interpreter,以便在本地运行时手动将其设置为virtualenv。
https://stackoverflow.com/questions/56536334
复制相似问题