我开发了一个自定义 ansible 模块,该模块依赖于 3rd 方库 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 在远程机器上安装 3rd 方库作为其设置的一部分。例如,在我的模块中添加一个 requirements.txt 并将其附加到它的设置中,但我似乎找不到一种优雅的方法来做到这一点。任何帮助表示赞赏。
首先 ansible 检测依赖项并自动安装它违背了他们在主机上尽可能少安装的理念。为了解决这个问题,我最终将自定义模块包装在一个角色中,并将变量传递给该角色,而不是直接传递给模块。因此,用户设定角色的变量,它使用呼叫include_role
,并tasks_from
包括在他们requirements.yml后。然后我使用 pip 模块(https://docs.ansible.com/ansible/latest/modules/pip_module.html)在调用我的自定义模块的任务之前将环境设置为角色中的任务。
我面临的第二个问题是,/usr/bin/python
当通过 virtualenv 执行时,ansible 将默认为even。这显然是设计的行为。为了解决这个问题,我必须ansible_python_interpreter
在本地运行时手动将其设置为 virtualenv。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句