virtualenv
VirtualEnv
Настройка Python виртуального окружения и установка/обновление зависимостей. Требует Ansible версии 2.8 или выше.
Поддержка версий Ansible < 2.8 была прекращена с версии 0.7.0.
Требования
Когда используется become
(т.е. virtualenv_user
не равен ansible_user
или
ansible_ssh_user
), необходимо установить требуемые пакеты ОС для метода become
(например, sudo
) до использования этой роли.
Когда ни один из 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
: Пакеты Python для глобальной установки с помощьюeasy_install
; по умолчанию —[]
.virtualenv_easy_install_executable
: Альтернативный исполняемый файл для установки глобальныхeasy_install
пакетов; по умолчанию —omit
, чтобы использовать командуeasy_install
из пути.virtualenv_global_packages
: Пакеты Python для глобальной установки с помощьюpip
; по умолчанию —[]
.virtualenv_pip_executable
: Альтернативный исполняемый файл для глобальныхpip
пакетов; по умолчанию —omit
, чтобы использовать командуpip
из пути.virtualenv_command
: Альтернативный исполняемый файл для создания виртуального окружения; по умолчанию —omit
, чтобы использовать командуvirtualenv
из пути.virtualenv_python
: Версия Python для создания виртуального окружения; по умолчанию —omit
, чтобы использовать интерпретатор Python, используемый Ansible.virtualenv_default_package
: Пакет для установки при создании виртуального окружения; по умолчанию —pip
.virtualenv_site_packages
: Логическое значение, указывающее, будет ли виртуальное окружение использовать глобальные пакеты; по умолчанию —no
.virtualenv_pre_packages
: Пакеты Python для установки с помощьюpip
внутри виртуального окружения перед зависимостями; по умолчанию —[]
. Эта опция также может быть использована для удаления пакетов, которые больше не нужны в виртуальном окружении.virtualenv_requirements
: Список файлов зависимостей для установки с помощьюpip
внутри виртуального окружения; по умолчанию —[]
. Эти пути должны уже присутствовать на удаленной системе.virtualenv_post_packages
: Пакеты Python для установки с помощьюpip
внутри виртуального окружения после зависимостей; по умолчанию —[]
. Эта опция также может быть использована для удаления пакетов, которые больше не нужны в виртуальном окружении.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
. Вам может понадобиться определитьallow_world_readable_tmpfiles
в вашемansible.cfg
(что всё равно будет генерировать предупреждение вместо ошибки) или использовать другой подход, чтобы позволить одному ненаделенному пользователю стать другим ненаделенным пользователем.
Пример плейбука
Следующий пример плейбука устанавливает 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: пользовательский обработчик виртуального окружения
debug:
msg: "виртуальное окружение в {{ virtualenv_path }} было обновлено."
listen: виртуальное окружение обновлено
Лицензия
BSD
Информация об авторе
Крис Черч (cchurch)
ansible-galaxy install cchurch/ansible-role-virtualenv