cchurch.virtualenv
VirtualEnv
Konfiguracja wirtualnego środowiska Pythona i instalacja/aktualizacja wymagań. Wymaga Ansible w wersji 2.8 lub późniejszej.
Obsługa wersji Ansible < 2.8 została usunięta od wersji 0.7.0.
Wymagania
Gdy używana jest opcja become
(tj. virtualenv_user
różni się od ansible_user
lub ansible_ssh_user
), wymagane jest zainstalowanie odpowiednich pakietów OS wspierających become_method
(np. sudo
) przed użyciem tej roli.
Gdy żaden z użytkowników ansible_user
, ansible_ssh_user
ani ansible_become_user
nie jest root
, niezbędne pakiety OS do uruchomienia komendy virtualenv
muszą być zainstalowane w inny sposób przed użyciem tej roli.
Zmienne roli
Poniższe zmienne mogą być zdefiniowane w celu dostosowania tej roli:
virtualenv_path
: Katalog docelowy, w którym ma zostać utworzone/zaktualizowane wirtualne środowisko (obowiązkowe).virtualenv_user
: Użytkownik, na którego konto ma zostać utworzone/zaktualizowane wirtualne środowisko; domyślnie jest to aktualny użytkownik (tj.ansible_user
lubansible_ssh_user
).virtualenv_default_os_packages
: Pakiety OS wymagane do utworzenia wirtualnego środowiska. Zwykle nie ma potrzeby zmiany tej opcji, chyba że używasz innegoansible_pkg_mgr
; domyślnie to{ apt: ['python-dev', 'python-virtualenv'], yum: ['python-devel', 'python-virtualenv'] }
.virtualenv_os_packages
: Pakiety OS, które mają być zainstalowane w celu wsparcia wirtualnego środowiska, indeksowane przezansible_pkg_mgr
; domyślnie to{}
.virtualenv_easy_install_packages
: Pakiety Pythona do zainstalowania globalnie przy użyciueasy_install
; domyślnie to[]
.virtualenv_easy_install_executable
: Alternatywny executable do użycia dla globalnych pakietóweasy_install
; domyślnie toomit
, aby użyć komendyeasy_install
znalezionej w ścieżce.virtualenv_global_packages
: Pakiety Pythona do zainstalowania globalnie przy użyciupip
; domyślnie to[]
.virtualenv_pip_executable
: Alternatywny executable do użycia dla globalnych pakietówpip
; domyślnie toomit
, aby użyć komendypip
znalezionej w ścieżce.virtualenv_command
: Alternatywny executable do użycia w celu utworzenia wirtualnego środowiska; domyślnie toomit
, aby użyć komendyvirtualenv
znalezionej w ścieżce.virtualenv_python
: Wersja Pythona, która ma być użyta do utworzenia wirtualnego środowiska; domyślnie toomit
, aby użyć interpretera Pythona używanego przez Ansible.virtualenv_default_package
: Domyślny pakiet do zainstalowania przy tworzeniu wirtualnego środowiska; domyślnie topip
.virtualenv_site_packages
: Boolean wskazujący, czy wirtualne środowisko ma używać globalnych pakietów; domyślnie tono
.virtualenv_pre_packages
: Pakiety Pythona do zainstalowania wewnątrz wirtualnego środowiska przed plikami wymagań; domyślnie to[]
. Ta opcja może być także używana do usunięcia pakietów, które nie są już potrzebne w wirtualnym środowisku.virtualenv_requirements
: Lista plików wymagań do zainstalowania w wirtualnym środowisku; domyślnie to[]
. Te ścieżki muszą być już obecne w zdalnym systemie.virtualenv_post_packages
: Pakiety Pythona do zainstalowania w wirtualnym środowisku po plikach wymagań; domyślnie to[]
. Ta opcja może być także używana do usunięcia pakietów, które nie są już potrzebne w wirtualnym środowisku.virtualenv_recreate
: Boolean wskazujący, czy wirtualne środowisko ma zostać usunięte i utworzone na nowo; domyślnie tono
.
Poniższa zmienna może być zdefiniowana dla wywołania play lub roli (ale nie jako zmienna grupy lub hosta):
virtualenv_notify_on_updated
: Nazwa handlera, który ma być powiadomiony, gdy wirtualne środowisko zostało utworzone lub zaktualizowane. Domyślnie to"virtualenv updated"
; zazwyczaj zaleca się, aby niestandardowe handlery nasłuchiwały na"virtualenv updated"
zamiast zmiany nazwy powiadomienia.
Każdy element na liście pakietów powyżej może być określony jako ciąg z tylko nazwą pakietu lub jako hash z kluczami name
, state
lub version
, np.:
- pakiet1
- name: pakiet2
state: absent
- name: pakiet3
version: 1.2
Listy pakietów OS są hashem indeksowanym przez menedżera pakietów, np.:
apt:
- pakiet1
- name: pakiet2-dev
state: absent
yum:
- pakiet1
- name: pakiet2-devel
state: absent
foo_pkg_mgr:
- foo-pakiet1
Ta rola może tworzyć wirtualne środowisko jako inny użytkownik, określony przez virtualenv_user
, i użyje metody become
określonej dla hosta/play/task. Pakiety OS i globalne będą instalowane tylko wtedy, gdy ansible_user
, ansible_ssh_user
lub ansible_become_user
to root
. Poniżej przedstawiono przykładowe kombinacje użytkowników z oczekiwanymi efektami:
ansible_user=root
: Pakiety OS i globalne będą zainstalowane; wirtualne środowisko będzie należało doroot
.ansible_user=root virtualenv_user=other
: Pakiety OS i globalne będą zainstalowane; użyta zostanie opcjabecome
; wirtualne środowisko będzie należało doother
.ansible_user=other
: Pakiety OS i globalne nie będą zainstalowane; wirtualne środowisko będzie należało doother
.ansible_user=other virtualenv_user=another
: Pakiety OS i globalne nie będą zainstalowane; użyta zostanie opcjabecome
; wirtualne środowisko będzie należało doanother
. Ta kombinacja może się nie powieść, jeśliother
nie może stać sięanother
. Poniższa uwaga dotycząca Ansible 2.1 może również mieć zastosowanie w tym przypadku.ansible_user=other ansible_become_user=root
: Pakiety OS i globalne będą zainstalowane; użyta zostanie opcjabecome
; wirtualne środowisko będzie należało doother
.ansible_user=other ansible_become_user=root virtualenv_user=another
: Pakiety OS i globalne będą zainstalowane; użyta zostanie opcjabecome
; wirtualne środowisko będzie należało doanother
. Możesz potrzebować zdefiniowaćallow_world_readable_tmpfiles
w swoimansible.cfg
(co nadal wygeneruje ostrzeżenie, a nie błąd) lub użyć innego podejścia, aby pozwolić jednemu użytkownikowi bez uprawnień stać się innym użytkownikiem bez uprawnień.
Przykładowy Playbook
Poniższy przykładowy playbook instaluje libjpeg
jako zależność systemową, tworzy lub aktualizuje wirtualne środowisko, instaluje konkretne pakiety, instaluje wymagania, a następnie usuwa stary pakiet, który nie jest już potrzebny:
- 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: niestandardowy handler wirtualnego środowiska
debug:
msg: "wirtualne środowisko w {{ virtualenv_path }} zostało zaktualizowane."
listen: wirtualne środowisko zaktualizowane
Licencja
BSD
Informacje o autorze
Chris Church (cchurch)
ansible-galaxy install cchurch.virtualenv