cchurch.virtualenv

构建状态 Galaxy

VirtualEnv

配置 Python 虚拟环境并安装/更新需求。需要 Ansible 2.8 或更高版本。

自版本 0.7.0 起,不再支持 Ansible 2.8 以下的版本。

要求

当使用 become 时(即 virtualenv_user 不等于 ansible_useransible_ssh_user),必须在使用此角色之前先安装必要的操作系统包(例如 sudo)以支持 become_method

ansible_useransible_ssh_useransible_become_user 没有一个是 root 时,必须通过其他方式先安装必要的操作系统包,以提供 virtualenv 命令,然后才能使用此角色。

角色变量

以下变量可用于自定义该角色:

  • virtualenv_path: 创建/更新虚拟环境的目标目录(必需)。
  • virtualenv_user: 创建/更新虚拟环境时使用的用户;默认为当前用户(即 ansible_useransible_ssh_user)。
  • virtualenv_default_os_packages: 创建虚拟环境所需的操作系统包。除非在使用不同的 ansible_pkg_mgr 的系统上运行,否则通常不需要更改此选项;默认值为 { apt: ['python-dev', 'python-virtualenv'], yum: ['python-devel', 'python-virtualenv'] }
  • virtualenv_os_packages: 支持虚拟环境所需安装的操作系统包,以 ansible_pkg_mgr 为索引;默认值为 {}
  • virtualenv_easy_install_packages: 使用 easy_install 全局安装的 Python 包;默认值为 []
  • virtualenv_easy_install_executable: 用于全局 easy_install 包的备用可执行文件;默认值为 omit,即使用路径中找到的 easy_install 命令。
  • virtualenv_global_packages: 使用 pip 全局安装的 Python 包;默认值为 []
  • virtualenv_pip_executable: 用于全局 pip 包的备用可执行文件;默认值为 omit,即使用路径中找到的 pip 命令。
  • virtualenv_command: 用于创建虚拟环境的备用可执行文件;默认值为 omit,即使用路径中找到的 virtualenv 命令。
  • virtualenv_python: 用于创建虚拟环境的 Python 版本;默认值为 omit,即使用 Ansible 使用的 Python 解释器。
  • virtualenv_default_package: 创建虚拟环境时要安装的默认包;默认值为 pip
  • virtualenv_site_packages: 布尔值,表示虚拟环境是否使用全局站点包;默认值为 no
  • virtualenv_pre_packages: 在虚拟环境中安装需求文件之前的 Python 包;默认值为 []。此选项也可用于移除不再需要的包。
  • virtualenv_requirements: 在虚拟环境中需要安装的需求文件列表;默认值为 []。这些路径必须已存在于远程系统中。
  • virtualenv_post_packages: 在虚拟环境中安装需求文件之后的 Python 包;默认值为 []。此选项也可用于移除不再需要的包。
  • virtualenv_recreate: 布尔值,指示是否删除并重新创建虚拟环境;默认值为 no

以下变量可在 play 或角色调用中定义(但不能作为库存组或主机变量):

  • virtualenv_notify_on_updated: 虚拟环境创建或更新时要通知的处理程序名称。默认值为 "virtualenv updated";通常建议自定义处理程序监听 "virtualenv updated",而不是更改通知名称。

包列表中的每个项目可以作为仅包含包名称的字符串或作为包含 namestateversion 键的哈希来指定,例如:

- package1
- name: package2
  state: absent
- name: package3
  version: 1.2

操作系统包列表是以包管理器为索引的哈希,例如:

apt:
  - package1
  - name: package2-dev
    state: absent
yum:
  - package1
  - name: package2-devel
    state: absent
foo_pkg_mgr:
  - foo-package1

此角色可以以 virtualenv_user 指定的其他用户身份创建虚拟环境,并将使用为主机/任务指定的 become_method。仅当 ansible_useransible_ssh_useransible_become_userroot 时,才会安装操作系统和全局包。以下是不同用户组合的示例及其预期结果:

  • ansible_user=root: 将安装操作系统和全局包;虚拟环境将由 root 拥有。
  • ansible_user=root virtualenv_user=other: 将安装操作系统和全局包;将使用 become;虚拟环境将由 other 拥有。
  • ansible_user=other: 不会安装操作系统和全局包;虚拟环境将由 other 拥有。
  • ansible_user=other virtualenv_user=another: 不会安装操作系统和全局包;将使用 become;虚拟环境将由 another 拥有。如果 other 无法成为 another,此组合可能会失败。下面的 Ansible 2.1 注意事项也可能适用于这种情况。
  • ansible_user=other ansible_become_user=root: 将安装操作系统和全局包;将使用 become;虚拟环境将由 other 拥有。
  • ansible_user=other ansible_become_user=root virtualenv_user=another: 将安装操作系统和全局包;将使用 become;虚拟环境将由 another 拥有。您可能需要在 ansible.cfg 中定义 allow_world_readable_tmpfiles(这仍会生成警告而不是错误),或使用其他方法使一个非特权用户能够转换为另一个非特权用户。

示例 Playbook

以下示例 Playbook 安装 libjpeg 作为系统依赖项,创建或更新虚拟环境,安装特定包,安装需求,然后移除不再需要的旧包:

- hosts: all
  roles:
    - name: cchurch.virtualenv
      vars:
        virtualenv_path: ~/env
        virtualenv_os_packages:
          apt: [libjpeg-dev]
          yum: [libjpeg-devel]
        virtualenv_pre_packages:
          - name: Django
            version: 1.11.26
          - Pillow
        virtualenv_requirements:
          - ~/src/requirements.txt
        virtualenv_post_packages:
          - name: PIL
            state: absent
  handlers:
    - name: custom virtualenv handler
      debug:
        msg: "虚拟环境在 {{ virtualenv_path }} 中已更新。"
      listen: virtualenv updated

许可证

BSD

作者信息

Chris Church (cchurch)

关于项目

Configure and update a Python virtualenv.

安装
ansible-galaxy install cchurch.virtualenv
许可证
other
下载
33.6k
拥有者
Python/Django/Ansible, will code for sweet tea and beer.