首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >开发使用第三方python库的自定义ansible模块时设置环境的正确方法

开发使用第三方python库的自定义ansible模块时设置环境的正确方法
EN

Stack Overflow用户
提问于 2019-06-11 12:07:27
回答 1查看 383关注 0票数 2

我已经开发了一个自定义的ansible模块,它依赖于第三方的库PyYAML。然而,运行攻略会产生以下结果

代码语言:javascript
运行
复制
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模块在攻略中添加一个步骤,将其安装到遥控器上。就像这样

代码语言:javascript
运行
复制
- hosts: all
  tasks:
  - name: Installing PyYAML python library using Ansible pip module
    pip:
      name: PyYAML

但这意味着攻略知道关于深入堆栈的模块的实现细节,这似乎是错误的。我的期望是,有某种方法可以告诉ansible将第三方库作为其安装的一部分安装到远程机器上。例如,在我的模块中添加一个requirements.txt,ansible会将它附加到它的设置中,但我似乎找不到一个优雅的方法来做到这一点。任何帮助都是非常感谢的。

EN

Stack Overflow用户

回答已采纳

发布于 2019-06-19 21:20:59

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

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

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56536334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档