¿Cómo puedo anteponer a PATH mientras ejecuto el módulo pip de Ansible?

17

Estoy intentando instalar psycopg2 en un Python virtualenv con el pipmódulo de Ansible , pero necesito anteponer una entrada a PATH para que se compile correctamente (necesita conocer la ruta al directorio que contiene pg_config). Veo que puedo pasar environmental pipmódulo, pero no estoy seguro de cómo anteponer en lugar de sobrescribir PATH.

Aquí intento anteponer la ruta con el directorio necesario, pero sobrescribe virtualenv PATHy falla:

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

Respuestas:

33

Si está utilizando Ansible 1.4 o posterior (que recomiendo) puede acceder a la variable env remota PATH :

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

Si, en cambio, está interesado en la PATHvariable de entorno del cliente local que ejecuta los scripts Ansible (en lugar del servidor de destino ), entonces desea hacer lo siguiente:

- 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
fuente
44
La ansible_env.PATHopción era lo que necesitaba: funcionaba perfectamente. ¡Gracias!
Collin Allen
1
Tenga en cuenta que esto toma la RUTA de la estación de trabajo, ¡no el servidor!
vdboor
44
Si necesita anteponer ~/bin, use PATH: "{{ansible_env.HOME}}/bin:{{ansible_env.PATH}}". Si en su lugar lo usa PATH: "~/bin:{{ansible_env.PATH}}", algunos programas (como Python shutil.which) no pueden usar ese componente.
Lekensteyn
3
También tenga en cuenta que se ansible_envrefiere al entorno del usuario SSH, no al sudoentorno. ansible_env.USERpor lo tanto, puede dar rootlugar a un usuario no privilegiado.
Lekensteyn