virtualenv

Статус сборки Galaxy

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_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. Вам может понадобиться определить 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)

О проекте

Configure and update a Python virtualenv.

Установить
ansible-galaxy install cchurch/ansible-role-virtualenv
Лицензия
other
Загрузки
29203
Владелец
Python/Django/Ansible, will code for sweet tea and beer.