cchurch.virtualenv
VirtualEnv
配置 Python 虚拟环境并安装/更新需求。需要 Ansible 2.8 或更高版本。
自版本 0.7.0 起,不再支持 Ansible 2.8 以下的版本。
要求
当使用 become 时(即 virtualenv_user 不等于 ansible_user 或 ansible_ssh_user),必须在使用此角色之前先安装必要的操作系统包(例如 sudo)以支持 become_method。
当 ansible_user、ansible_ssh_user 或 ansible_become_user 没有一个是 root 时,必须通过其他方式先安装必要的操作系统包,以提供 virtualenv 命令,然后才能使用此角色。
角色变量
以下变量可用于自定义该角色:
virtualenv_path: 创建/更新虚拟环境的目标目录(必需)。virtualenv_user: 创建/更新虚拟环境时使用的用户;默认为当前用户(即ansible_user或ansible_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",而不是更改通知名称。
包列表中的每个项目可以作为仅包含包名称的字符串或作为包含 name、state 或 version 键的哈希来指定,例如:
- 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_user、ansible_ssh_user 或 ansible_become_user 为 root 时,才会安装操作系统和全局包。以下是不同用户组合的示例及其预期结果:
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)
安装
ansible-galaxy install cchurch.virtualenv许可证
other
下载
35.5k
拥有者
Python/Django/Ansible, will code for sweet tea and beer.
