cchurch.virtualenv
VirtualEnv
Configura un entorno virtual de Python e instala/actualiza los requisitos. Se requiere Ansible 2.8 o posterior.
El soporte para versiones de Ansible < 2.8 se eliminó a partir de la versión 0.7.0.
Requisitos
Cuando se utiliza become
(es decir, virtualenv_user
no es igual a ansible_user
o ansible_ssh_user
), los paquetes del sistema operativo necesarios para soportar become_method
(por ejemplo, sudo
) deben estar instalados antes de usar este rol.
Cuando ninguno de ansible_user
, ansible_ssh_user
o ansible_become_user
es root
, los paquetes del sistema operativo necesarios para proporcionar el comando virtualenv
deben instalarse de alguna otra manera antes de usar este rol.
Variables del Rol
Las siguientes variables pueden definirse para personalizar este rol:
virtualenv_path
: Directorio objetivo donde crear/actualizar el entorno virtual (requerido).virtualenv_user
: Usuario que se convertirá para crear/actualizar el entorno virtual; el valor predeterminado es el usuario actual (es decir,ansible_user
oansible_ssh_user
).virtualenv_default_os_packages
: Paquetes del sistema operativo necesarios para crear un entorno virtual. Normalmente no hay necesidad de cambiar esta opción a menos que se trabaje en un sistema con unansible_pkg_mgr
diferente; el valor predeterminado es{ apt: ['python-dev', 'python-virtualenv'], yum: ['python-devel', 'python-virtualenv'] }
.virtualenv_os_packages
: Paquetes del sistema operativo a instalar para soportar el entorno virtual, indexados poransible_pkg_mgr
; el valor predeterminado es{}
.virtualenv_easy_install_packages
: Paquetes de Python a instalar globalmente usandoeasy_install
; el valor predeterminado es[]
.virtualenv_easy_install_executable
: Ejecutable alternativo a usar para paquetes globales deeasy_install
; el valor predeterminado esomit
para usar el comandoeasy_install
encontrado en el path.virtualenv_global_packages
: Paquetes de Python a instalar globalmente usandopip
; el valor predeterminado es[]
.virtualenv_pip_executable
: Ejecutable alternativo a usar para paquetes globales depip
; el valor predeterminado esomit
para usar el comandopip
encontrado en el path.virtualenv_command
: Ejecutable alternativo a usar para crear el entorno virtual; el valor predeterminado esomit
para usar el comandovirtualenv
encontrado en el path.virtualenv_python
: Versión de Python a utilizar para crear el entorno virtual; el valor predeterminado esomit
para utilizar el intérprete de Python usado por Ansible.virtualenv_default_package
: Paquete predeterminado a instalar al crear el entorno virtual; el valor predeterminado espip
.virtualenv_site_packages
: Booleano que indica si el entorno virtual utilizará paquetes globales; el valor predeterminado esno
.virtualenv_pre_packages
: Paquetes de Python a instalar conpip
dentro del entorno virtual antes de los archivos de requisitos; el valor predeterminado es[]
. Esta opción también se puede usar para remover paquetes que ya no se necesitan en el entorno virtual.virtualenv_requirements
: Lista de archivos de requisitos a instalar conpip
dentro del entorno virtual; el valor predeterminado es[]
. Estas rutas deben estar ya presentes en el sistema remoto.virtualenv_post_packages
: Paquetes de Python a instalar conpip
dentro del entorno virtual después de los archivos de requisitos; el valor predeterminado es[]
. Esta opción también se puede usar para remover paquetes que ya no se necesitan en el entorno virtual.virtualenv_recreate
: Booleano que indica si se debe eliminar y recrear el entorno virtual; el valor predeterminado esno
.
La siguiente variable puede definirse para la ejecución del play o del rol (pero no como una variable de grupo o de host en el inventario):
virtualenv_notify_on_updated
: Nombre del manejador para notificar cuando el entorno virtual fue creado o actualizado. El valor predeterminado es"virtualenv updated"
; generalmente se recomienda que los manejadores personalizados escuchen"virtualenv updated"
en lugar de cambiar el nombre de la notificación.
Cada ítem en una lista de paquetes anterior puede especificarse como una cadena con solo el nombre del paquete o como un hash con las claves name
, state
o version
, por ejemplo:
- package1
- name: package2
state: absent
- name: package3
version: 1.2
Las listas de paquetes del sistema operativo son un hash indexado por el administrador de paquetes, por ejemplo:
apt:
- package1
- name: package2-dev
state: absent
yum:
- package1
- name: package2-devel
state: absent
foo_pkg_mgr:
- foo-package1
Este rol puede crear un entorno virtual como otro usuario, especificado por virtualenv_user
, y usará el become_method
especificado para el host/play/tarea. Los paquetes del sistema operativo y globales solo se instalarán cuando ansible_user
, ansible_ssh_user
o ansible_become_user
sea root
. A continuación se enumeran los ejemplos de combinaciones de usuarios con sus resultados esperados:
ansible_user=root
: Se instalarán los paquetes del sistema operativo y globales; el entorno virtual será propiedad deroot
.ansible_user=root virtualenv_user=otro
: Se instalarán los paquetes del sistema operativo y globales; se usarábecome
; el entorno virtual será propiedad deotro
.ansible_user=otro
: No se instalarán los paquetes del sistema operativo y globales; el entorno virtual será propiedad deotro
.ansible_user=otro virtualenv_user=otro
: No se instalarán los paquetes del sistema operativo y globales; se usarábecome
; el entorno virtual será propiedad deotro
. Esta combinación puede fallar siotro
no puede convertirse enotro
. También podría aplicarse la nota sobre Ansible 2.1 en este caso.ansible_user=otro ansible_become_user=root
: Se instalarán los paquetes del sistema operativo y globales; se usarábecome
; el entorno virtual será propiedad deotro
.ansible_user=otro ansible_become_user=root virtualenv_user=otro
: Se instalarán los paquetes del sistema operativo y globales; se usarábecome
; el entorno virtual será propiedad deotro
. Puede ser necesario definirallow_world_readable_tmpfiles
en tuansible.cfg
(que aún generará una advertencia en lugar de un error) o usar otro enfoque para permitir que un usuario no privilegiado se convierta en otro usuario no privilegiado.
Ejemplo de Playbook
El siguiente playbook de ejemplo instala libjpeg
como una dependencia del sistema, crea o actualiza un entorno virtual, instala paquetes específicos, instala requisitos y luego elimina un paquete antiguo que ya no se necesita:
- 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: manejador de virtualenv personalizado
debug:
msg: "el entorno virtual en {{ virtualenv_path }} fue actualizado."
listen: virtualenv updated
Licencia
BSD
Información del Autor
Chris Church (cchurch)
Configure and update a Python virtualenv.
ansible-galaxy install cchurch.virtualenv