cchurch.virtualenv
VirtualEnv
Konfigurieren Sie eine Python-Virtualenv und installieren/aktualisieren Sie die Anforderungen. Erfordert Ansible 2.8 oder höher.
Die Unterstützung für Ansible-Versionen < 2.8 wurde ab Version 0.7.0 eingestellt.
Anforderungen
Wenn become
verwendet wird (d.h. virtualenv_user
ist nicht gleich ansible_user
oder ansible_ssh_user
), müssen die erforderlichen Betriebssystempakete zur Unterstützung von become_method
(z.B. sudo
) installiert werden, bevor diese Rolle verwendet wird.
Wenn keiner von ansible_user
, ansible_ssh_user
oder ansible_become_user
root
ist, müssen die erforderlichen Betriebssystempakete, um den Befehl virtualenv
bereitzustellen, auf andere Weise installiert werden, bevor diese Rolle verwendet wird.
Variablen der Rolle
Die folgenden Variablen können definiert werden, um diese Rolle anzupassen:
virtualenv_path
: Zielverzeichnis, in dem die Virtualenv erstellt/aktualisiert werden soll (erforderlich).virtualenv_user
: Benutzer, der zum Erstellen/Aktualisieren der Virtualenv verwendet werden soll; Standard ist der aktuelle Benutzer (d.h.ansible_user
oderansible_ssh_user
).virtualenv_default_os_packages
: Betriebssystempakete, die erforderlich sind, um eine Virtualenv zu erstellen. Es ist normalerweise nicht nötig, diese Option zu ändern, es sei denn, Sie verwenden ein System mit einem anderenansible_pkg_mgr
; Standard ist{ apt: ['python-dev', 'python-virtualenv'], yum: ['python-devel', 'python-virtualenv'] }
.virtualenv_os_packages
: Betriebssystempakete, die installiert werden müssen, um die Virtualenv zu unterstützen, indexiert nachansible_pkg_mgr
; Standard ist{}
.virtualenv_easy_install_packages
: Python-Pakete, die global miteasy_install
installiert werden sollen; Standard ist[]
.virtualenv_easy_install_executable
: Alternativer Befehl für globaleeasy_install
-Pakete; Standard istomit
, um den Befehleasy_install
im Pfad zu verwenden.virtualenv_global_packages
: Python-Pakete, die global mitpip
installiert werden sollen; Standard ist[]
.virtualenv_pip_executable
: Alternativer Befehl für globalepip
-Pakete; Standard istomit
, um den Befehlpip
im Pfad zu verwenden.virtualenv_command
: Alternativer Befehl zum Erstellen der Virtualenv; Standard istomit
, um den Befehlvirtualenv
im Pfad zu verwenden.virtualenv_python
: Python-Version, die zum Erstellen der Virtualenv verwendet werden soll; Standard istomit
, um den von Ansible verwendeten Python-Interpreter zu verwenden.virtualenv_default_package
: Standardpaket, das beim Erstellen der Virtualenv installiert werden soll; Standard istpip
.virtualenv_site_packages
: Boolean, der angibt, ob die Virtualenv globale Site-Pakete verwenden wird; Standard istno
.virtualenv_pre_packages
: Python-Pakete, die innerhalb der Virtualenv vor den Anforderungsdateien installiert werden sollen; Standard ist[]
. Diese Option kann auch verwendet werden, um Pakete zu entfernen, die in der Virtualenv nicht mehr benötigt werden.virtualenv_requirements
: Liste der Anforderungsdateien, die innerhalb der Virtualenv installiert werden sollen; Standard ist[]
. Diese Pfade müssen bereits auf dem entfernten System vorhanden sein.virtualenv_post_packages
: Python-Pakete, die innerhalb der Virtualenv nach den Anforderungsdateien installiert werden sollen; Standard ist[]
. Diese Option kann auch verwendet werden, um Pakete zu entfernen, die in der Virtualenv nicht mehr benötigt werden.virtualenv_recreate
: Boolean, der angibt, ob die Virtualenv gelöscht und neu erstellt werden soll; Standard istno
.
Die folgende Variable kann für den Play oder den Rollaufruf definiert werden (aber nicht als Inventargruppe oder Hostvariable):
virtualenv_notify_on_updated
: Handlername, um zu benachrichtigen, wenn die Virtualenv erstellt oder aktualisiert wurde. Der Standard ist"virtualenv updated"
; es wird allgemein empfohlen, dass benutzerdefinierte Handler auf"virtualenv updated"
hören, anstatt den Benachrichtigungsnamen zu ändern.
Jeder Artikel in einer Paketliste oben kann als Zeichenkette mit nur dem Paketnamen oder als Hash mit den Schlüsseln name
, state
oder version
angegeben werden, z.B.:
- package1
- name: package2
state: absent
- name: package3
version: 1.2
Betriebssystem-Paketlisten sind ein Hash, der nach dem Paketmanager indiziert ist, z.B.:
apt:
- package1
- name: package2-dev
state: absent
yum:
- package1
- name: package2-devel
state: absent
foo_pkg_mgr:
- foo-package1
Diese Rolle kann eine Virtualenv als ein anderer Benutzer erstellen, der durch virtualenv_user
angegeben ist, und verwendet die für den Host/Play/Task angegebene become_method
. Betriebssystem- und globale Pakete werden nur installiert, wenn ansible_user
, ansible_ssh_user
oder ansible_become_user
root
ist. Die folgenden Beispielkombinationen von Benutzern sind aufgeführt mit ihren erwarteten Ergebnissen:
ansible_user=root
: Betriebssystem- und globale Pakete werden installiert; die Virtualenv gehörtroot
.ansible_user=root virtualenv_user=other
: Betriebssystem- und globale Pakete werden installiert;become
wird verwendet; die Virtualenv gehörtother
.ansible_user=other
: Betriebssystem- und globale Pakete werden nicht installiert; die Virtualenv gehörtother
.ansible_user=other virtualenv_user=another
: Betriebssystem- und globale Pakete werden nicht installiert;become
wird verwendet; die Virtualenv gehörtanother
. Diese Kombination kann fehlschlagen, wennother
nichtanother
werden kann. Die Ansible 2.1-Anmerkung unten könnte auch in diesem Fall zutreffen.ansible_user=other ansible_become_user=root
: Betriebssystem- und globale Pakete werden installiert;become
wird verwendet; die Virtualenv gehörtother
.ansible_user=other ansible_become_user=root virtualenv_user=another
: Betriebssystem- und globale Pakete werden installiert;become
wird verwendet; die Virtualenv gehörtanother
. Möglicherweise müssen Sieallow_world_readable_tmpfiles
in Ihreransible.cfg
definieren (was immer noch eine Warnung anzeigt, anstatt einen Fehler auszulösen) oder einen anderen Ansatz verwenden, um einen nicht privilegierten Benutzer zu unterstützen, der einen anderen nicht privilegierten Benutzer wird.
Beispiel-Playbook
Das folgende Beispiel-Playbook installiert libjpeg
als Systemabhängigkeit, erstellt oder aktualisiert eine Virtualenv, installiert spezifische Pakete, installiert Anforderungen und entfernt dann ein altes Paket, das nicht mehr benötigt wird:
- 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: benutzerdefinierter Virtualenv-Handler
debug:
msg: "Virtualenv in {{ virtualenv_path }} wurde aktualisiert."
listen: virtualenv updated
Lizenz
BSD
Autoreninformation
Chris Church (cchurch)
Configure and update a Python virtualenv.
ansible-galaxy install cchurch.virtualenv