Wie kann ich PATH voranstellen, während das Pip-Modul von Ansible ausgeführt wird?

17

Ich versuche, psycopg2 mit Ansibles pipModul in einem virtuellen Python-Server zu installieren , aber ich muss einen Eintrag in PATH voranstellen, damit er korrekt erstellt wird (der Pfad zum Verzeichnis muss bekannt sein pg_config). Ich sehe, dass ich environmentzum pipModul übergehen kann , bin mir aber nicht sicher, wie ich es voranstellen soll, anstatt es zu überschreiben PATH.

Hier versuche ich, dem Pfad das erforderliche Verzeichnis voranzustellen, aber es überschreibt die virtuelle Umgebung PATHund schlägt fehl:

- pip:
    name: psycopg2
    virtualenv: /path/to/my/venv
  environment:
    PATH: /usr/pgsql-9.3/bin:$PATH
Collin Allen
quelle

Antworten:

33

Wenn Sie Ansible 1.4 oder höher verwenden (was ich empfehle), können Sie auf die Remote- PATH Umgebungsvariable zugreifen :

- pip: name=psycopg2 virtualenv=/path/to/my/venv
  environment:
    PATH: /usr/pgsql-9.3/bin:{{ ansible_env.PATH }}

Wenn Sie stattdessen PATHan der Umgebungsvariable des lokalen Clients interessiert sind, auf dem die Ansible-Skripts ausgeführt werden (anstelle des Zielservers ), möchten Sie Folgendes tun:

- pip: name=psycopg2 virtualenv=/path/to/my/venv
  environment:
    # This only makes sense if your client and server are homogeneous, that is,
    # they have the same PATHs.
    PATH: /usr/pgsql-9.3/bin:{{ lookup('env', 'PATH') }}
Rico
quelle
4
Die ansible_env.PATHOption war das, was ich brauchte - hat perfekt funktioniert. Vielen Dank!
Collin Allen
1
Beachten Sie, dass dies den PFAD der Workstation und nicht den des Servers übernimmt!
vdboor
4
Wenn Sie voranstellen müssen ~/bin, verwenden Sie PATH: "{{ansible_env.HOME}}/bin:{{ansible_env.PATH}}". Wenn Sie stattdessen verwenden PATH: "~/bin:{{ansible_env.PATH}}", können einige Programme (z. B. Python's shutil.which) diese Komponente nicht verwenden.
Lekensteyn
3
Beachten Sie auch, dass ansible_envsich dies auf die Umgebung des SSH-Benutzers bezieht, nicht auf die sudoUmgebung. ansible_env.USERkann daher rooteher zu einem nicht privilegierten Benutzer führen.
Lekensteyn,