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
下载
33.6k
拥有者
Python/Django/Ansible, will code for sweet tea and beer.