Ansible의 pip 모듈을 실행하는 동안 PATH 앞에 추가하려면 어떻게해야합니까?


17

Ansible의 pip모듈 을 사용하여 psycopg2를 Python virtualenv에 설치하려고 시도 하지만 올바르게 빌드하려면 PATH에 항목을 추가해야합니다 (포함하는 디렉토리의 경로를 알아야 함 pg_config). 나는 통과 할 수 있음을 참조 environment받는 pip모듈,하지만 난 덮어 쓰기보다는 앞에 추가하는 방법을 확실 해요 PATH.

여기에 필요한 디렉토리가있는 경로를 추가하려고하지만 virtualenv를 덮어 쓰지 PATH못합니다.

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

답변:


33

Ansible 1.4 이상 (권장)을 사용하는 경우 remote PATH env 변수에 액세스 할 수 있습니다 .

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

대신 대상 서버 대신 Ansible 스크립트를 실행 PATH하는 로컬 클라이언트 의 env var에 관심이있는 경우 다음을 수행하려고합니다.

- 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
ansible_env.PATH완벽하게 작동 - 옵션은 내가 필요로 무엇을이었다. 감사!
Collin Allen

1
이것은 서버가 아닌 워크 스테이션의 PATH를 사용합니다.
vdboor

4
앞에 추가해야하는 경우을 ~/bin사용하십시오 PATH: "{{ansible_env.HOME}}/bin:{{ansible_env.PATH}}". 대신을 사용 PATH: "~/bin:{{ansible_env.PATH}}"하면 일부 프로그램 (예 : Python)에서 shutil.which해당 구성 요소를 사용할 수 없습니다.
Lekensteyn

3
또한 ansible_env환경이 아니라 SSH 사용자의 환경 을 나타냅니다 sudo. ansible_env.USER따라서 root권한이없는 사용자 가 아닌 결과를 낳을 수 있습니다 .
Lekensteyn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.