ansible如何在目标上找到python模块,是否可以使用virtualenv安装模块依赖项?

ansible如何在目标上找到python模块,是否可以使用virtualenv安装模块依赖项?,ansible,Ansible,我需要在一些剧本上创建一些snake oil证书,我正在为此使用openssl_privatekey、openssl_csr和openssl_证书模块。问题在于该模块依赖于PyOpenSSL,并且CentOS版本的PyOpenSSL已经过时 为了解决这个问题,我从pip安装了PyOpenSSL,它可以工作,但如果已经安装了PyOpenSSL模块,则可能会覆盖该模块 在我的剧本上,我这样做: - name: 'Install PyOpenSSL' pip: name: PyOpenSS

我需要在一些剧本上创建一些snake oil证书,我正在为此使用openssl_privatekey、openssl_csr和openssl_证书模块。问题在于该模块依赖于PyOpenSSL,并且CentOS版本的PyOpenSSL已经过时

为了解决这个问题,我从pip安装了PyOpenSSL,它可以工作,但如果已经安装了PyOpenSSL模块,则可能会覆盖该模块

在我的剧本上,我这样做:

- name: 'Install PyOpenSSL'
  pip:
    name: PyOpenSSL
    state: present
    version: '>= 0.15'
现在,有没有办法在虚拟环境中安装它,以便ansible知道它?如果是这样的话,我可以简单地删除游戏结束时的虚拟环境。

您可以使用
pip
模块创建一个虚拟环境。通过将
Ansible\u python\u解释器
事实设置为指向virtualenv中的
python
二进制文件,您可能可以让Ansible意识到该virtualenv,例如:

---
- hosts: localhost
  gather_facts: false
  tasks:
    - name: install modules
      pip:
        state: present
        name: "{{ modules }}"
        virtualenv: /tmp/venv
      vars:
        modules:
          - pyopenssl

    - set_fact:
        ansible_python_interpreter: /tmp/venv/bin/python

警告:我还没有彻底测试过。它没有破坏任何东西。

似乎是个好主意,之后我如何恢复旧的ansible\u python\u解释器?我想把它封装在一个单独的角色中,或者在另一个事实中保留
ansible\u python\u解释器
的值,然后在您的角色集
ansible\u python\u解释器
结束时保存
ansible\u python\u解释器