gpt4 book ai didi

pip - 开发使用 3rd 方 python 库的自定义 ansible 模块时设置环境的正确方法

转载 作者:行者123 更新时间:2023-12-05 05:10:32 25 4
gpt4 key购买 nike

我开发了一个自定义 ansible 模块,该模块依赖于第 3 方库 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 模块在 playbook 中添加一个步骤,以将其安装到远程。有 pip 像

- hosts: all
tasks:
- name: Installing PyYAML python library using Ansible pip module
pip:
name: PyYAML

但这意味着 playbook 知道隐藏在堆栈深处的模块的实现细节,这似乎是错误的。我的期望是有一些方法可以告诉 ansible 在远程机器上安装第 3 方库作为其设置的一部分。例如,在我的模块中添加一个 requirements.txt 并 ansible 将其附加到它的设置中,但我似乎找不到一种优雅的方法来做到这一 pip 。感谢您的帮助。

最佳答案

首先 ansible 检测依赖项并自动安装它违背了他们在主机上安装尽可能少的理念。为了解决这个问题,我最终将我的自定义模块包装在一个角色中,并将变量传递给该角色,而不是直接传递给模块。因此用户设置角色变量并在将其包含在他们的 requirements.yml 中后使用 include_roletasks_from 调用它。然后我使用 pip 模块 ( https://docs.ansible.com/ansible/latest/modules/pip_module.html ) 在调用我的自定义模块的任务之前将环境设置为角色中的任务。

我面临的第二个问题是 ansible 将默认为 /usr/bin/python 即使通过 virtualenv 执行。这显然是设计好的行为。为了解决这个问题,我必须包含 ansible_python_interpreter 以在本地运行时手动将其设置为 virtualenv。

关于pip - 开发使用 3rd 方 python 库的自定义 ansible 模块时设置环境的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56536334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com