Як я можу додати до PATH під час запуску модуля розсилки Ansible?


17

Я намагаюся встановити psycopg2 в Python virtualenv за допомогою pipмодуля Ansible , але мені потрібно додати запис до 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 або новішу версію (що я рекомендую), ви можете отримати доступ до віддаленої PATH змінної env:

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

Якщо замість цього вас цікавить PATHсередовище локального клієнта, який виконує скрипти Ansible (замість цільового сервера ), то вам потрібно зробити наступне:

- 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) не можуть використовувати цей компонент.
Лекенштейн

3
Будьте також в курсі, що ansible_envвідноситься до середовища користувача SSH, а не до sudoсередовища. ansible_env.USERТаким чином, це може призвести rootдо непривілейованого користувача.
Лекенштейн
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.