代码之家  ›  专栏  ›  技术社区  ›  onknows ntg

难道不应该在Ansible目标节点上使用virtualenv吗?

  •  0
  • onknows ntg  · 技术社区  · 3 年前

    在大多数情况下,我认为Ansible工程师安装pip包1)不使用virtualenv,2)在根目录下。

    如果我们手动执行此操作,我们将看到警告

    警告:以root身份运行pip将破坏包和权限。您应该使用venv可靠地安装软件包: https://pip.pypa.io/warnings/venv

    通常,当我们的Ansible自动化变得更加先进时,我们需要额外的pip包来使Ansible模块工作。通常情况下,这还需要安装额外的操作系统包。例如,Ubuntu 18.04上的python-ldap-pip包需要

    • 构建必需
    • python3开发
    • 蟒蛇3轮子
    • libsasl2开发
    • libldap2开发
    • libssl开发

    Ansible在目标节点上工作的方式是安装额外的pip包作为root,而这显然不是使用Python和pip的推荐方式,这让我怀疑是否没有更好的方法来做到这一点。

    我们不应该使用virtualenv和root以外的其他帐户为Ansible安装pip吗?

    0 回复  |  直到 3 年前
        1
  •  0
  •   toydarian Mário Alfredo Jorge    3 年前

    这可能有多个方面。我首先想到的是:

    在任何venv之外使用“全局”python,可能对绝大多数用户都很有效,而如果你不熟悉这个概念,使用venv可能会导致各种意想不到的行为。
    例如,如果默认使用venv,人们会安装python包,然后想知道为什么当他们试图在主机上的python中导入这些包时,python声称它们不可用。

    另一方面,如果你想使用venv,它可能相对容易。在任何剧本中,您都可以创建venv,然后只需更新 ansible_python_interpreter 变量

    - pip:
        name: pip
        virtualenv: /path/to/venv
    
    - set_fact:
        ansible_python_interpreter: /path/to/venv/bin/python
    
    - setup:
    

    免责声明:我只是很快尝试了一下,发现它有效,所以在某些情况下可能会出现故障。

    显然,在每场比赛中添加这样的内容不是很好,但可以做得更好,例如,在第一次设置时创建venv,然后使用 interpreter_python 键入 ansible.cfg .

    tl;博士
    使用全局python可能是对大多数用户最有效的方式,而“超级用户”仍然可以通过一些额外的操作来实现他们想要的。