Come posso anteporre a PATH mentre eseguo il modulo pip di Ansible?


17

Sto tentando di installare psycopg2 in un Python virtualenv con il pipmodulo Ansible , ma ho bisogno di anteporre una voce a PATH affinché si costruisca correttamente (deve conoscere il percorso della directory che contiene pg_config). Vedo che posso passare environmental pipmodulo, ma non sono sicuro di come anteporre piuttosto che sovrascrivere PATH.

Qui sto tentando di anteporre il percorso con la directory necessaria, ma sovrascrive virtualenv PATHe fallisce:

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

Risposte:


33

Se si utilizza Ansible 1.4 o versione successiva (che consiglio di utilizzare) è possibile accedere alla variabile env remota PATH :

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

Se invece sei interessato PATHall'ambiente var del client locale che esegue gli script Ansible (invece del server di destinazione ), allora vuoi fare quanto segue:

- 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') }}

4
L' ansible_env.PATHopzione era ciò di cui avevo bisogno: funzionava perfettamente. Grazie!
Collin Allen,

1
Si noti che questo richiede il PERCORSO della workstation, non del server!
vdboor,

4
Se è necessario anteporre ~/bin, utilizzare PATH: "{{ansible_env.HOME}}/bin:{{ansible_env.PATH}}". Se invece lo usi PATH: "~/bin:{{ansible_env.PATH}}", alcuni programmi (come quelli di Python shutil.which) non sono in grado di usare quel componente.
Lekensteyn,

3
Tenere presente che si ansible_envriferisce all'ambiente dell'utente SSH, non sudoall'ambiente. ansible_env.USERpuò quindi risultare rootpiuttosto che un utente non privilegiato.
Lekensteyn,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.