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

时间:2019-12-04 12:00:53

标签: ansible

我需要在一些剧本上创建一些蛇油证书,并且为此使用了openssl_privatekey,openssl_csr和openssl_certificate模块。问题在于该模块依赖于PyOpenSSL,而CentOS版本的PyOpenSSL已过时。

要解决此问题,我从pip安装了PyOpenSSL,该方法可以正常工作,但是如果与yum一起安装,则可能会覆盖已经存在的PyOpenSSL模块。

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

- name: 'Install PyOpenSSL'
  pip:
    name: PyOpenSSL
    state: present
    version: '>= 0.15'

现在,有什么方法可以在虚拟环境中安装它,以便ansible知道吗?如果是这样,我只需在剧本结尾处删除虚拟环境即可。

1 个答案:

答案 0 :(得分:2)

您可以使用pip模块创建虚拟环境。您可以通过将ansible_python_interpreter事实设置为指向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

注意:我尚未对此进行彻底测试。它没有破坏任何东西。