当前位置: 首页 > 知识库问答 >
问题:

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

晋安国
2023-03-14

我已经开发了一个自定义ansible模块,它依赖于第三方库Pyyaml。然而,运行剧本会产生

ansible_module_my_module.py, line 5, in <module>
  import yaml
ImportError: No module named yaml
- hosts: all
  tasks:
  - name: Installing PyYAML python library using Ansible pip module
    pip:
      name: PyYAML

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

共有1个答案

祁刚毅
2023-03-14

首先,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。

 类似资料:
  • 本文向大家介绍Python 使用 environs 库定义环境变量的方法,包括了Python 使用 environs 库定义环境变量的方法的使用技巧和注意事项,需要的朋友参考一下 Environs是解析环境变量的Python库。它的开发受envparse启发,底层使用marshmallow验证并序列化值。 在运行一个项目的时候,我们经常会遇到设置不同环境的需求,如设置是开发环境、测试环境还是生产环

  • 问题内容: 我想不出一种使用Docker和Boot2Docker在OS X上设置开发环境的好方法。我遇到的问题是如何管理源代码,以便: 我可以使用已经安装的工具(文本编辑器,IDE,git等)在OS X上修改代码。 这些修改反映在Docker容器中,因此,如果我重新运行测试或刷新网页,则可以立即看到所做的更改。 从理论上讲,通过将我的源代码安装为一个卷,应该很容易做到这一点: 不幸的是,这有两个主

  • 本文向大家介绍Python import自定义模块方法,包括了Python import自定义模块方法的使用技巧和注意事项,需要的朋友参考一下 python包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件的路径。 下面将具体介绍几种常用情况: (1)主程序与模块程序在同一目录下: 如下面程序结构:     若在程序test1.py中导入模块mod1, 则直接使用im

  • Python 的标准库是随着 Pyhon 安装的时候默认自带的库,提供了有文本处理、系统管理、网络处理等功能。Python 的第三方库,是由各家厂商和 Python 爱好者开发的库,第三方库需要下载后安装到 Python 的安装目录下。 有一句话:“人生苦短,我用Python”。使用 Python 可以节省开发时间,原因在于: Python 有丰富且易用的第三方模块。使用第三方模块省去了大量重复造

  • 本文向大家介绍在Python中使用第三方模块的教程,包括了在Python中使用第三方模块的教程的使用技巧和注意事项,需要的朋友参考一下 在Python中,安装第三方模块,是通过setuptools这个工具完成的。Python有两个封装了setuptools的包管理工具:easy_install和pip。目前官方推荐使用pip。 如果你正在使用Mac或Linux,安装pip本身这个步骤就可以跳过了。

  • 假设我有一个python包的标准python目录结构,就像这里一样,并考虑我需要向包中添加一个函数。更具体地说,我想通过运行一个测试代码,用试错法来做这件事。正确的工作流程是什么? 我目前做以下工作: 做,只要我在包中进行更改 打开一个 Python 解释器, 运行测试代码。 但显然,此流程需要花费大量时间来通过测试代码检查修改。我觉得我做错了什么,更好的方法存在。