Jak mogę przejść do PATH podczas uruchamiania modułu pip Ansible?

17

Próbuję zainstalować psycopg2 w Python virtualenv z modułem Ansible pip, ale muszę przygotować wpis w PATH, aby mógł się poprawnie zbudować (musi znać ścieżkę do katalogu zawierającego pg_config). Widzę, że mogę przejść environmentdo pipmodułu, ale nie jestem pewien, jak dodać, a nie zastąpić PATH.

Tutaj próbuję dodać ścieżkę do niezbędnego katalogu, ale zastępuje virtualenv PATHi kończy się niepowodzeniem:

- pip:
    name: psycopg2
    virtualenv: /path/to/my/venv
  environment:
    PATH: /usr/pgsql-9.3/bin:$PATH
Collin Allen
źródło

Odpowiedzi:

33

Jeśli używasz Ansible 1.4 lub nowszej (co polecam), możesz uzyskać dostęp do zdalnej PATH zmiennej env:

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

Jeśli zamiast tego interesuje Cię PATHzmienna env var lokalnego klienta uruchamiającego skrypty Ansible (zamiast serwera docelowego ), to wykonaj następujące czynności:

- 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
źródło
4
To ansible_env.PATHbyła opcja, której potrzebowałem - działała idealnie. Dzięki!
Collin Allen
1
Pamiętaj, że wymaga to ŚCIEŻKI stacji roboczej, a nie serwera!
vdboor
4
Jeśli potrzebujesz przedpłaty ~/bin, użyj PATH: "{{ansible_env.HOME}}/bin:{{ansible_env.PATH}}". Jeśli zamiast tego użyjesz PATH: "~/bin:{{ansible_env.PATH}}", niektóre programy (takie jak Python shutil.which) nie będą mogły korzystać z tego komponentu.
Lekensteyn
3
Pamiętaj również, że ansible_envodnosi się to do środowiska użytkownika SSH, a nie sudośrodowiska. ansible_env.USERmoże zatem skutkować rootraczej nieuprzywilejowanym użytkownikiem.
Lekensteyn,